0

次のような 3 つのモデルがあります。

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 を使用するよりクリーンな方法があるのではないかと思います。任意のヒント?

4

2 に答える 2

3

has_many:throughassociationを使用する必要があります

あなたの場合は

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
于 2013-01-11T19:44:03.177 に答える
1

これを試して:

Vote.joins(comment: :user).where(users: {id: @user.id})
于 2013-01-11T19:27:45.100 に答える