rails嵌套关联中的模型关联

时间:2016-06-23 03:29:50

标签: ruby-on-rails

假设我有两个模型,has_many答案和答案belongs_to提问。如果在我的用户模型中我添加了has_many个问题,那么用户会自动使用has_many Answers,还是需要手动添加has_many个答案?

3 个答案:

答案 0 :(得分:0)

你应该阅读"有很多通过"关系。 http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

答案 1 :(得分:0)

不自动。要让用户获得许多答案,您需要使用Trains,例如,

Firebase ref = new Firebase(Constants.FIREBASE_URL);
ref.child("Trains").addValueEventListener(new ValueEventListener() {
    ...

请参阅:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

答案 2 :(得分:0)

如果您有以下设置:

class User << ActiveRecord::Base
  has_many :questions
end

class Question << ActiveRecord::Base
  has_many :answers
end

class Answer << ActiveRecord::Base
  belongs_to :question
end

您无法通过一种方法获得所有用户的答案。您必须将所有问题作为集合进行处理,然后遍历您的问题集并获得所有答案。这显然会导致N+1查询问题。

@user.questions.map(&:answers).flatten

要解决N+1查询问题,您必须使用.includes(),但这又会解决N+1问题。

@user.questions.includes(:answers)

解决方案:使用has_many :through

如果您将has_many :through添加到User模型中:

class User << ActiveRecord::Base
  has_many :questions
  has_many :answers, through: :questions
end

这样您就可以使用以下一种方法访问用户的答案:

@user.answers