首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -连接查询困难

Rails -连接查询困难
EN

Stack Overflow用户
提问于 2012-04-26 21:07:44
回答 2查看 178关注 0票数 1

我有两个基本模型:体育场所有者

这两种模式之间的关系是:

体育场

代码语言:javascript
复制
belongs_to :owner

所有者

代码语言:javascript
复制
has_many :stadiums

这里的问题是,所有者也有关联的类别,这里是owner_category模型出现的地方。

所有者

代码语言:javascript
复制
has_and_belongs_to_many :owner_categories,
                          :join_table => 'l_owners_owner_categories',

OwnerCategory

代码语言:javascript
复制
has_and_belongs_to_many :owners, :join_table => 'l_owners_owner_categories'

基本上,

OwnerCategory表如下所示:

代码语言:javascript
复制
id,name
1,sport
2,kids

所以,我的问题是:

假设我允许用户选择一个城市和一个分类,那么如何从所有者拥有给定类别E 228的城市获得所有体育场?

例如:

如果我有下列体育场馆:

代码语言:javascript
复制
id,name,city,owner_id
1,'soccer stadium','New York',5
2,'music stadium','New York',4
2,'music stadium','San Francisco',4

下列业主:

代码语言:javascript
复制
id,name
4, 'John'
5, 'Peter'

以下OwnersCategories表:

代码语言:javascript
复制
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'

和下面的联接表:

代码语言:javascript
复制
owner_id,owner_category_id
 5, 1

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

代码语言:javascript
复制
 1,'soccer stadium','New York',5
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 21:15:56

尝试这样的方法(警告:未测试):

代码语言:javascript
复制
Stadium.joins(:owner).joins(:owner => :owner_categories)
.where(:city => "New York").where("owners_categories.name = ?", "sports")
票数 0
EN

Stack Overflow用户

发布于 2012-04-26 21:19:36

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10341449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档