Ruby on rails Rails-连接查询困难

Ruby on rails Rails-连接查询困难,ruby-on-rails,activerecord,join,Ruby On Rails,Activerecord,Join,我有两个基本模型:体育场和业主 这两个模型之间的关系是: 体育场: 业主: 这里的问题是,所有者也有相关的类别,这就是所有者类别模型的用武之地 业主: 和所有者类别: 基本上 OwnerCategory表如下所示: id,name 1,sport 2,kids 所以,我的问题是: 如果我让用户选择一个城市和一个类别,我如何从拥有给定类别的城市获得所有体育场馆 例如: 如果我有以下体育场: id,name,city,owner_id 1,'soccer stadium','New York',5

我有两个基本模型:体育场和业主

这两个模型之间的关系是:

体育场:

业主:

这里的问题是,所有者也有相关的类别,这就是所有者类别模型的用武之地

业主:

和所有者类别:

基本上

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'
和以下联接表:

owner_id,owner_category_id
 5, 1
当用户选择“纽约”和“体育”时,它应该给这个体育场:

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

尝试以下警告:未测试:

Stadium.joins(:owner).joins(:owner => :owner_categories)
.where(:city => "New York").where("owners_categories.name = ?", "sports")

难道它不应该是所有者有很多:体育场吗?当试图创建第二个范围时,它说没有一个块就不能创建一个过程…它需要花括号,而且不会花时间。。。终止答案已编辑。
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
Stadium.joins(:owner).joins(:owner => :owner_categories)
.where(:city => "New York").where("owners_categories.name = ?", "sports")
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)