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

Rails3を使用しています。

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 に答える