首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 3,HABTM如何使用条件查询

Rails 3,HABTM如何使用条件查询
EN

Stack Overflow用户
提问于 2012-01-03 05:49:58
回答 1查看 1.1K关注 0票数 3

我有奖项和类别,加入了Awards_Categories

我有两个类别。

我需要找到所有的奖项,有Category.id = 1,但没有Category.id =2。一些类别有一个或另一个,有些只有一个。我想要一个有类别1但没有类别2的奖项列表。

我有一个作用域:

代码语言:javascript
运行
复制
scope :in_categories, lambda { |categories|
      joins(:categories).
      where(:awards_categories => { :category_id => categories } ).
      select("DISTINCT awards.*")
    }

这适用于类似这样的查询:

代码语言:javascript
运行
复制
@awardsall = Award.in_categories([1 && 2]).order("name ASC") 

我试过了

代码语言:javascript
运行
复制
@awards_store = Award.in_categories([1]).order("name ASC") 

通过以下方式:

代码语言:javascript
运行
复制
<% @awards_store.each do |store| %> 
        <li><%= link_to store.name, award_path(store), :title => store.info %> | 
        <% store.categories.each do |cat| %>
            <%= cat.id%>
        <% end %>
    </li>
<% end %>

编辑-我知道这个块不是我需要的。这只是我试图找到一种让它工作的方法。

虽然这个列表列出了所有奖项和所有奖项类别,但它仍然会抓取category.id =2的奖项,因为有些奖项两者都有

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-04 16:37:14

对不起,我没有测试它,但是它的主要思想是计算连接表中的行数。

代码语言:javascript
运行
复制
scope :in_categories, lambda { |*categories|
      joins(:categories).
      where(:awards_categories => { :category_id => categories } ).
      where("(select count(distinct category_id) from awards_categories where category_id in (?)) = ?", categories, categories.size)
    }

并这样使用它:

代码语言:javascript
运行
复制
@awardsall = Award.in_categories(1, 2).order("name ASC") 

@awards_store = Award.in_categories(1).order("name ASC") 

如果你有一个用于awards_categories的模型,那么它看起来会更好:

代码语言:javascript
运行
复制
scope :in_categories, lambda { |*categories|
      joins(:categories).
      where(:awards_categories => { :category_id => categories } ).
      where("#{AwardCategory.where(:category_id => categories).count("distinct category_id").to_sql}=#{categories.size}")
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8705690

复制
相关文章

相似问题

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