2011-02-01 4 views
0

は、たぶん私は見ていない、単純な問題はあるが、今の私には少しトリッキーです(has_mas>にhas_many)

何が必要なの突出する知っていますユーザーは賭けていた。私のような何かやりたい :

some_user.bets.projects 

私のモデルは以下のとおりです。

class User < ActiveRecord::Base 
    has_many :bets 
end 
class Project < ActiveRecord::Base 
    has_many :bets 
end 
class Bet < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :project 
end 

それでは、ユーザーインスタンスから始めて、明確にするために、どのように私は、ユーザーが賭けをしていた投影しているかを知ることができます。 SQLで

はそれを動作させる方法を

select projects.name from users 
       inner join bets 
          on bets.user_id = users.id 
       inner join projects 
          on bets.project_id = projects.id 
      where users.id = 1; 

のようなものでしょうか?

答えて

4

次のようにあなたのUserProjectクラスを更新します。

class User < ActiveRecord::Base 
    has_many :bets 
    has_many :projects, :through => :bets 
end 

class Project < ActiveRecord::Base 
    has_many :bets 
    has_many :users, :through => :bets 
end 

を次にあなたがこれを行うことができます:

user = User.first  # Find a user 
projects = user.projects # and return the projects that have bets 
+0

あなたは私に確かに道を与える、私はいくつかの他の部分を変更する必要がありますが、行く方法は、 ':スルー(throught) 'のものでした。代わりに、直接ベットをしてください ありがとう –