Rails:将多个has_many关系串联起来

时间:2013-01-11 19:18:46

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

我有三个看起来像这样的模型:

Class User < ActiveRecord::Base
  has_many :comments
end

Class Comment < ActiveRecord::Base
  belongs_to :user
  has_many :votes
end

Class Vote < ActiveRecord::Base
  belongs_to :comment
end

现在我希望获得与用户评论相关的所有投票:

@user.comments.votes

但这引发了错误:

undefined method `votes' for #<ActiveRecord::Relation:0x3f6f8a0>

这似乎应该有效,但我怀疑ActiveRecord正在咳嗽更深的has_many关系。我已经将一个获得所需结果的SQL查询混合在一起,但我怀疑使用纯粹的ActiveRecord是一种更干净的方法。有什么提示吗?

2 个答案:

答案 0 :(得分:3)

您应该使用has_many :through association

在你的情况下,它将是

Class User < ActiveRecord::Base
  has_many :comments
  has_many :votes, :through => :comments
end

Class Comment < ActiveRecord::Base
  belongs_to :user
  has_many :votes
end

Class Vote < ActiveRecord::Base
  belongs_to :comment
end

然后只需用

获得投票
@user.votes

答案 1 :(得分:1)

试试这个:

Vote.joins(comment: :user).where(users: {id: @user.id})