Поиск по связанным моделям в rails3 - PullRequest
0 голосов
/ 20 февраля 2011

После следования Railscast для создания поисковой системы мой код выглядит следующим образом для поисковых заголовков и описания сообщений:

  def self.search(search)
    if search
      where("LOWER (description) LIKE ? OR LOWER (title) LIKE ?", "%#{search.downcase}%" , "%#{search.downcase}%")
    else
      scoped
    end
  end

Таблица записей, хотя есть теги has_many, и я бы хотел, чтобы этот поисковый запрос также использовался для поиска по тегам. Возможно ли это?

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Попробуйте

  def self.search(search)
    if search
      includes(:tags).where("LOWER (description) LIKE ? OR LOWER (title) LIKE ? OR tags.name LIKE ?", "%#{search.downcase}%" , "%#{search.downcase}%", "%#{search.downcase}%")
    else
      scoped
    end
  end

Это сделает LIKE для свойства name тегов.Отредактируйте его в соответствии с вашими потребностями.

0 голосов
/ 20 февраля 2011

Рекомендовать хранить tag_list на самой модели поста, что сделает поиск тривиальным. Ответ @ Догберта также работает, следующий содержит запрос к одной таблице.

def post
  before_update :set_tag_list

  def set_tag_list
    self.tag_list = tags.map{|tag| tag.name}.join(', ')
  end
end

Тогда вы можете включить tag_list в свой поисковый запрос и вам не нужно объединять много моделей вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...