Комбинация meta_search с actions_as_taggable_on

У меня возникла небольшая проблема с некоторыми функциями поиска для разрабатываемого мной веб-сайта Rails 3. У меня есть простая модель сообщения , которая выглядит так:

class Post < ActiveRecord::Base
  acts_as_taggable
end

Я использую actions_as_taggable_on , чтобы немного упростить добавление тегов к моим сообщениям. Когда у меня есть сообщение с тегом "рельсы" и я делаю следующее, все работает хорошо:

@posts = Post.tagged_with("rails")

Дело в том, что я тоже хочу поискать по названию сообщения. Когда у меня есть сообщение с названием "Hello world" и тегом "rails", я хочу найти его, выполнив поиск по запросу "hello" или "rails". Поэтому мне нужен оператор LIKE для столбца заголовка в сочетании с методом tagged_with actions_as_taggable_on . Область , где не работает, потому что она использует И вместо ИЛИ .

Я надеялся, что meta_search решит проблему , но у меня это не работает. Я пробовал несколько вещей. Вот два примера того, что я пробовал:

@search = Post.search(:tagged_with_or_title_like => params[:search])
@search = Post.search(:title_like => params[:search], :tagged_with => params[:search])

Он просто не распознает tagged_with. Я впервые использую meta_search , так что я могу делать что-то здесь не так. ;) Я где-то читал, что searchlogic работал в сочетании с plays_as_taggable_on , но поскольку он не поддерживает Rails 3, я не могу его использовать.

Я надеялся, что кто-нибудь здесь может помочь мне с этой проблемой. Кто-нибудь знает, как объединить plays_as_taggable_on с meta_search ? Или, может быть, знаете решение без meta_search ? Кроме того, если есть лучший вариант для plays_as_taggable_on , который работает с meta_search , я бы тоже хотел это услышать. :)

РЕДАКТИРОВАТЬ: Я не могу использовать это.

Я надеялся, что кто-нибудь здесь может помочь мне с этой проблемой. Кто-нибудь знает, как объединить plays_as_taggable_on с meta_search ? Или, может быть, знаете решение без meta_search ? Кроме того, если есть лучший вариант для plays_as_taggable_on , который работает с meta_search , я бы тоже хотел это услышать. :)

РЕДАКТИРОВАТЬ: Я не могу использовать это.

Я надеялся, что кто-нибудь здесь может помочь мне с этой проблемой. Кто-нибудь знает, как объединить plays_as_taggable_on с meta_search ? Или, может быть, знаете решение без meta_search ? Кроме того, если есть лучший вариант для plays_as_taggable_on , который работает с meta_search , я бы тоже хотел это услышать. :)

РЕДАКТИРОВАТЬ: Я заставил его работать без использования tagged_with или meta_search . Это выглядело так:

Post.select("DISTINCT posts.*").joins(:base_tags).where("posts.title LIKE ? OR tags.name = ?", "%"+params[:search]+"%", params[:search])

Созданный запрос был нелепым, поэтому я попробовал другой маршрут: без actions_as_taggable_on и meta_search . Я сам создал таблицу тегов и подключил ее к сообщениям с помощью has_and_belongs_to_many . У меня не будет других таблиц, которые нужно будет связывать с тегами, так что это поможет мне. Я создал область поиска как по тегам, так и по заголовку:

scope :search, lambda { |search| select("DISTINCT posts.*").joins(:tags).where("posts.title LIKE ? OR tags.name = ?", "%"+search+"%", search) }

Теперь я могу делать следующее:

Post.search(params[:search])

Он отлично работает, и запрос тоже довольно приятный. Тем не менее, если кто знает способ получше: скажите, пожалуйста. Это также может быть полезно для людей, приезжающих сюда через Google. MySomething.Kind, а не MySomething.MySomethingKind. Вложенные классы иногда видны снаружи ...

Когда я использую вложенные классы, я даю им имена , не включая имя внешнего класса, например, MySomething.Kind , а не MySomething.MySomethingKind . Вложенные классы иногда видны снаружи, и тогда я хочу всегда ссылаться на них по имени, определяемому включающим классом, то есть MySomething.Kind , а не только Kind . Иногда существует несколько классов, содержащих вложенный Kind , поэтому использование неполного имени может сбивать с толку.

Есть ли способ предотвратить ненужный импорт Eclipse mypackage.MySomething.Kind вместо этого использования (уже импортированного) mypackage.MySomething вместе с полуквалифицированным именем?

ОБНОВЛЕНИЕ:

Это не происходит спонтанно. Как указано в jprete , когда я всегда использую полуквалифицированное имя, вложенный класс не импортируется. Но любой рефакторинг, создающий переменную типа MySomething.Kind , объявляет ее только как Kind и добавляет нежелательный оператор импорта. Это делает рефакторинг бесполезным, так как мне приходится редактировать его вручную. Когда я забываю, я получаю худшее из обоих: смесь неквалифицированных и полуквалифицированных имен.

7
задан Community 23 May 2017 в 11:52
поделиться