首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ActiveRecord匹配所有的“和”?

如何使用ActiveRecord匹配所有的“和”?
EN

Stack Overflow用户
提问于 2013-05-14 23:47:40
回答 2查看 297关注 0票数 0

我需要一个ActiveRecord查询来匹配params[]数组中的所有项。

我当前的方法是基于查找任何标签来给出结果,而不是“全部匹配”

代码语言:javascript
复制
class Product < ActiveRecord::Base
    has_many :tags

    def self.filter_by_params(params)
        scoped = self.scoped
        scoped = scoped.includes(:tags).where(:tags => {:id => params[:t]}) if params[:t]
        scoped
    end
end

我试着写一些类似下面的东西,但是它没有给我任何结果。有没有人能把我引向正确的方向?有没有一种方式可以说" AND "

代码语言:javascript
复制
def self.filter_by_params(params)
    scoped = self.scoped.includes(:tags)
    params[:t].each do |t|
        scoped = scoped.where(:tags => {:id => t})
    end
    scoped
end
EN

回答 2

Stack Overflow用户

发布于 2013-05-15 02:00:14

如果我理解正确的话,params[:t]将是一个ID数组。如果是这种情况,你可以这样做:

代码语言:javascript
复制
def self.filter_by_params(params)
  scoped = self.scoped
  scoped = scoped.tags.find_all_by_id(params[:t])
  scoped
end

或者只是:

代码语言:javascript
复制
def self.filter_by_params(params)
  tags.find_all_by_id(params[:t])
end
票数 0
EN

Stack Overflow用户

发布于 2013-05-15 04:30:18

您应该使用:joins而不是:includes

http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables

代码语言:javascript
复制
class Product < ActiveRecord::Base
    has_many :tags

    def self.filter_by_params(params)
        scoped = self.scoped
        scoped = scoped.joins(:tags).where(:tags => {:id => params[:t]}) if params[:t]
        scoped
    end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16547556

复制
相关文章

相似问题

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