поиск моделей tagged_with ИЛИ как (с act_as_taggable_on) - PullRequest
3 голосов
/ 21 февраля 2011

Я делаю поиск по модели, используя область.Доступ к нему осуществляется через форму поиска с параметром поиска 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.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Когда-нибудь задумывались о Ареле? Вы можете сделать что-то вроде этого

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)
0 голосов
/ 21 февраля 2011

Я могу ошибаться, но я не думаю, что области видимости могут помочь вам построить условие or.Вместо этого вам придется написать код вручную, чтобы создать предложение where.Может быть, что-то вроде этого ...

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

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

scope.where clause, *qparams
...