如何通过两个对象(到同一个'目标'对象)编写has_many?

时间:2012-11-24 23:16:33

标签: ruby-on-rails activerecord has-many-through

描述用户与其问题和联系人结果之间关系的正确方法是什么?我希望能够调用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

1 个答案:

答案 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

如果你想出更好的东西,请告诉我们。