我有三个看起来像这样的模型:
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是一种更干净的方法。有什么提示吗?
答案 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})