2016-05-18 187 views
1

我有这个安装在我的应用程序:rails4 ActiveRecord关联

User has_many :products 
User has_many :product_leads, through: :products 
Product belongs_to :user # (in products table there is user_id) 
ProductLead belongs_to :product # (in product_leads table there is no user_id) 
ProductLead belongs_to :user 

在此设置user.product_leads是工作,但product_lead.user不是。所以我删除了最后一行。

我没有user_idproduct_leads表中,但我甚至不想。 ProductLead表单填充为嵌套属性和Product表单。

有没有比下面更好的定义product_lead.user的方法?或者我应该在product_leads表中有user_id

product_lead.rb

def user 
    product.user 
end 

回答

1

我相信has_one :through协会会帮助你。

def ProductLead < ActiveRecord::Base 
    has_one :product 
    has_one :user, through: :product 
    # ... other code 
end 
+0

这就需要换入'ProductLead'了'product_id'外键的任务改为'products'表中的'product_lead_id',但这个障碍放在一边,它应该工作。 –

1

我没有看到你所提出的,只要它的做法有任何问题只读的,你并不需要一个user分配给product

你应该,但是,反对的情况下的零通话user后卫product不存在:

def user 
    product.try(:user) # Only call `user` if product is non-nil. 
end 
+0

Anthony,我在模型中同时使用'validates:user,presence:true'和't.integer“user_id”,null:false'在db中。你仍然会推荐使用'try'? –