描述用户与其问题和联系人结果之间关系的正确方法是什么?我希望能够调用User.outcomes并获得用户的所有结果,无论结果是针对问题还是联系人。
以下是我们现在的模特。 has_many通过关系描述得当吗?
用户模型
has_many :questions
has_many :contacts
has_many :outcomes, through: :questions
has_many :outcomes, through: :contacts
问题模型
has_many :outcomes
联系模式
has_many :outcomes
结果模型
belongs_to :question
belongs_to :contact
答案 0 :(得分:1)
因此,这可能不是理想的解决方案,因为它返回的是Array而不是ActiveRecord :: Relation。这意味着您将失去延迟加载以及进一步添加范围和where
语句等等的能力。它比编写SQL更好,但应该做你想做的事情:
class User < ActiveRecord::Base
has_many :questions
has_many :contacts
has_many :questions_outcomes, :through => :questions, :class_name => "Outcomes"
has_many :contacts_outcomes, :through => :contacts, :class_name => "Outcomes"
def outcomes
return questions_outcomes + contacts_outcomes
end
end
如果你想出更好的东西,请告诉我们。