我有两个基本模型:体育场和所有者
这两种模式之间的关系是:
体育场
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所以,我的问题是:
假设我允许用户选择一个城市和一个分类,那么如何从所有者拥有给定类别E 228的城市获得所有体育场?
例如:
如果我有下列体育场馆:
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'和下面的联接表:
owner_id,owner_category_id
5, 1当用户选择“纽约”和“体育”时,应该给这个体育场:
1,'soccer stadium','New York',5发布于 2012-04-26 21:15:56
尝试这样的方法(警告:未测试):
Stadium.joins(:owner).joins(:owner => :owner_categories)
.where(:city => "New York").where("owners_categories.name = ?", "sports")发布于 2012-04-26 21:19:36
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)https://stackoverflow.com/questions/10341449
复制相似问题