2017-04-19 207 views
0

我想在用户和产品之间建立模型关联,因此我尝试通过关联使用has_many。关于Rails模型关联

但是有多种类型的产品。

一个用户:User.rb

三种产品:Shoe.rb Shirt.rb Pant.rb和每个模型都有不同种类的属性,所以我不能将它们集成在一起。

虽然每个用户可以有很多产品,但产品只能有一个用户。

我已经做了一些像下面这样的模拟关联。

User.rb

has_many :purchasements 
has_many :shoes, through: :purchasements 
has_many :shirts, through: :purchasements 
has_many :pants, through: :purchasements 

迁移用户

nothing more than default 

Purchasement.rb

belongs_to :user 
belongs_to :shoe 
belongs_to :shirt 
belongs_to :pant 

用于迁移统购统销

t.belongs_to :user 
t.belongs_to :shoe 
t.belongs_to :shirt 
t.belongs_to :pant 

Shoe.rb/Shirt.rb/Pant.rb

has_one :purchasement 
has_one :user, through: :purchasement 

迁移鞋/衬衫/裤子

nothing more than default 

我试图让用户通过purchasements模式购买的每个产品。

purchasement_controller.rb

def create 
    @shoe = params[:target_shoe] #Could be shoe, shirt or pant 
    current_user.shoes << @shoe 
    current_user.save 
end 

另一个尝试

def create 
    @shoe = params[:target_shoe] #Could be shoe, shirt or pant 
    shoe_transaction = current_user.purchasements.create 
    shoe_transaction.shoe = @shoe 
end 

它不通过中间模型保存,purchasemnets.rb

我在哪里丢失的?

它给了我一个错误比我需要保存衬衫鞋裤子一起。

提前感谢。

+0

为什么你有单独的鞋子,衬衫和裤子的模特/桌子?即使他们没有分享他们所有的属性,它会让你的生活更容易在同一张桌子上。您也可以查看一些名为STI(单表继承)的东西。 – Iceman

+0

我怎样才能将它放在同一张桌子上,以方便生活。 ? –

+0

我把它们分开的主要原因是我没有真正处理产品。这是关于学术论文的类型应该有不同的逻辑来显示自己 –

回答

0

根据我的理解,您似乎希望用户拥有购买项目,并且您希望购买项目具有单个项目。您还希望将用户直接链接到各个项目。你是协会应该改成这样:

User.rb(保持不变)

has_many :purchasements 
has_many :shoes, through: :purchasements 
has_many :shirts, through: :purchasements 
has_many :pants, through: :purchasements 

Purchasement.rb

belongs_to :user 
has_many :shoes 
has_many :shirts 
has_many :pants 

Shoe.rb/Shirt.rb /裤。RB

belongs_to :purchasement 
belongs_to :user 

在你的数据库,你将需要的数据字段purchasement_iduser_id添加到鞋,衬衫和裤子。您还应该删除购买数据表中用于Shoe,Shirt和Pant的不必要的belongs_to数据字段。

+0

谢谢你的好意罗素 –

+0

没问题。如果这对你有帮助,请接受或提出我的答案。谢谢,快乐编码 –

+0

如何通过购买节省衬衫 –