1

私のアプリには、ユーザー、ビデオ、投票のクラスがあります。ユーザーと動画は、1対多または多対多の2つの異なる方法で相互に関連付けることができます。前者は、ユーザーが動画を送信する場合です(1人のユーザーが多数の動画を送信できます)。後者は、ユーザーがビデオに投票する場合です(ユーザーは投票を通じて多くのビデオを持っており、その逆も同様です)。これが私のコードですが、機能しません(私は、ビューで何か間違ったことをしている可能性があると思います)。これらの関連付けを構成する正しい方法を理解するのを手伝ってください。

class User < ActiveRecord::Base
  has_many :videos, :as => :submissions
  has_many :votes #have tried it without this
  has_many :videos, :as => :likes,  :through => :votes
end

class Vote < ActiveRecord::Base
  belongs_to :video
  belongs_to :user
end

class Video < ActiveRecord::Base
  belongs_to :user
  has_many :votes #have tried it without this . . . superfluous?
  has_many :users, :as => :voters, :through => :votes
end
4

3 に答える 3

2

私は行って確認していませんが、次のようになります。

それ以外の

has_many :videos, :as => :likes, :through => :votes

使用する

has_many :likes, :class_name => "Video", :through => :votes

下と同じ:

has_many :users, :as => :voters, :through => :votes

になります

has_many :voters, :class_name => "User", :through => :votes

:asポリモーフィックアソシエーションに使用されます。詳細については、ドキュメントのこの章を参照してください。

于 2009-10-06T04:52:12.170 に答える
1
class User < ActiveRecord::Base
  has_many :videos # Submitted videos
  has_many :votes
  has_many :voted_videos, :through => :votes # User may vote down a vid, so it's not right to call 'likes'
end

class Vote < ActiveRecord::Base
  belongs_to :video
  belongs_to :user
end

class Video < ActiveRecord::Base
  belongs_to :user
  has_many :votes
  has_many :voters, :through => :votes
end

詳細については、http://guides.rubyonrails.org/association_basics.htmlを参照してください。

お役に立てば幸いです=)

于 2009-10-06T04:58:41.190 に答える
1

あなたの助けてくれてありがとう、間違いなく私を正しい方向に向けました。動作するコードは次のとおりです。

class User < ActiveRecord::Base
  has_many :videos, :as => :submissions
  has_many :votes
  has_many :likes, :source => :video, :through => :votes 
end

class Vote < ActiveRecord::Base
  belongs_to :video
  belongs_to :user
end

class Video < ActiveRecord::Base
  belongs_to :user
  has_many :votes
  has_many :voters, :source => :user, :through => :votes 
end

PS私はそれを:likesとして保持しました。なぜなら、このアプリでは、彼らは反対票を投じることができず、賛成票を投じるだけだからです。

于 2009-10-06T05:21:52.160 に答える