1

2 つのモデル間に「多くのスルー」関係があります。

Task:  
has_many :placements
has_many :games, :through => :placements

Game:
  has_many :placements
  has_many :tasks, :through => :placements

Placements:
  belongs_to :task
  belongs_to :game

コントローラーの index メソッドで、特定のゲーム ID を持つタスクのみを一覧表示したいと考えています。私が思いついた解決策は、ID の配列を使用していますが、これを行う方法はもっと簡単であるに違いないと考えています。

@tasks = Task.find(Placement.where(:game_id => current_user.selectedgame).collect(&:task_id))

どんな提案でも大歓迎です。

4

2 に答える 2

2

あなたの質問には何かが欠けているかもしれませんが...

@tasks = Game.find(current_user.selectedgame).tasks

おそらく使用する必要がありますhas_and_belongs_to_many

于 2012-05-22T09:09:32.470 に答える
0

Gamesオブジェクトから開始できます。

Games.find(current_user.selectedgame).tasks

has_and_belongs_to_manyの代わりにリレーションシップを使用できますhas_many :throughが、必須ではありません。アクティブなレコードの関連付けに関するRuby on Rails ガイドに、これに関するセクションがあります

于 2012-05-22T09:30:40.807 に答える