2012-04-26 77 views
1

我有兩種基本模式:體育場業主導軌 - 聯接查詢困難

這兩個模型之間的關係是:

一個體育場

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' 

一ND以下連接表:

owner_id,owner_category_id 
5, 1 

當用戶選擇「紐約」和「體育」也應該給這個體育場:

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

不應該是所有者has_many:體育場? – 2012-04-26 21:10:16

+0

已更正。抱歉。 – 2012-04-26 21:12:03

回答

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

當試圖創建第二個範圍它說「不能創建Proc沒有一個塊...」 – 2012-04-26 22:58:27

+0

它需要大括號,並且不會做...結束。回答編輯。 – 2012-04-27 10:29:37