rails4 activerecord associations

时间:2016-05-18 16:36:04

标签: ruby-on-rails 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_id表格中没有product_leads,但我甚至不想这样做。 ProductLead表单与Product表单一起填充为嵌套属性。

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

product_lead.rb

def user
  product.user
end

2 个答案:

答案 0 :(得分:1)

我相信has_one :through协会可以帮到你。

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

答案 1 :(得分:1)

我没有看到您提出的方法存在任何问题,只要它是只读的,您不需要为user分配product {\ n} { {1}}。

但是,在user不存在的情况下,您应该防止在{0}上调用product

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