3

我正在使用范围搜索模型。这是由带有搜索参数 q 的搜索表单访问的。目前我有下面的代码,可以很好地搜索与模型关联的标签。但我也想搜索标题字段。如果我添加到此范围,那么我将获得所有与搜索词匹配的标签和标题的结果。

但是,我需要返回与 company_id 和 category_id 匹配的结果,以及匹配的标题或标签。我不知道如何向这个范围添加 OR 子句。

  def self.get_all_products(company, category = nil, subcategory = nil, q = nil)
    scope = scoped{}
    scope = scope.where "company_id = ?", company
    scope = scope.where "category_id = ?", category unless category.blank?
    scope = scope.tagged_with(q) unless q.blank?
    scope
  end

我正在使用 Rails 3。

4

2 回答 2

3

有没有考虑过阿雷尔?你可以做这样的事情

t = TableName.arel_table
scope = scope.where(t[:title].eq("BLAH BLAH").or(t[:tag].eq("blah blah")))

否则你可以做

scope = scope.where("title = ? OR tag = ", title_value, tag_value)
于 2011-04-21T20:59:35.567 回答
0

我可能是错的,但我认为范围不能帮助您构建or条件。您将不得不手写代码来构建您的where子句。也许像这样的东西......

clause = "company_id=?"
qparams = [company]

unless category.blank?
    clause += " or category_id=?"
    qparams <= category
end

scope.where clause, *qparams
于 2011-02-21T03:56:16.760 回答