2012-04-26 22 views
1

クエリ困難参加:スタジアム所有者Railsの - 私は2つの基本的なモデル持って

これら二つのモデル間の関係は以下のとおりです。

スタジアム

belongs_to :owner 

アンオーナー

has_many :stadiums 

ここのものは所有者にも関連しており、ここでowner_categoryモデルの出番であるカテゴリーがあり、ある

所有者:。

has_and_belongs_to_many :owner_categories, 
          :join_table => 'l_owners_owner_categories', 

そしてOwnerCategory

has_and_belongs_to_many :owners, :join_table => 'l_owners_owner_categories' 

基本的には、

OwnerCategory表は次のようになります。

id,name 
1,sport 
2,kids 

だから、私の質問は:

私は、ユーザーがカテゴリーを選択してみましょうことを考えると、どのようにすればすべてスタジアムその都市からオーナーは与えられたカテゴリ

したがって、たとえば:

id,name,city,owner_id 
1,'soccer stadium','New York',5 
2,'music stadium','New York',4 
2,'music stadium','San Francisco',4 

次所有者:

id,name 
4, 'John' 
5, 'Peter' 

次OwnersCategoriesテーブル:

id,name,description 
1,'sports','this category is associated with stadiums that support sports' 
2,'music','this category is associated with stadiums that support music' 

A

私は、次のスタジアムを持っている場合ND次は、テーブルに参加:

owner_id,owner_category_id 
5, 1 

ユーザーが「ニューヨーク」を選択し、「スポーツ」、それがこのスタジアムを与える必要があります:

1,'soccer stadium','New York',5 
+1

は、それが所有者にhas_manyではないでしょうか? –

+0

が修正されました。ごめんなさい。 –

答えて

0

は、この(:テストされていない警告):のようなものを試してみてください

をスタジアム:
Stadium.joins(:owner).joins(:owner => :owner_categories) 
.where(:city => "New York").where("owners_categories.name = ?", "sports") 
0
class Stadium < ActiveRecord::Base 

    scope :for_city, lambda { |city_name| where(:city => city_name) } 
    scope :for_owner_category, 
     lambda { |owner_category_id| 
      joins("INNER JOIN owners ON owners.id = stadium.owner_id" + 
       " INNER JOIN l_owners_owner_categories ON l_owners_owner_categories.owner_id = owners.id"). 
      where("l_owners_owner_categories.owner_category_id = :category_id", 
       :category_id => owner_category_id) 
     } 
end 

Stadium.for_city("New York").for_owner_category(1) 
+0

2番目のスコープを作成しようとすると、「Procをブロックと一緒に作成できません...」 –

+0

中括弧が必要で、終了しません。回答が編集されました。 –

関連する問題