реализация простого поиска по объектной ассоциации или любой произвольной коллекции в рельсах - PullRequest
0 голосов
/ 03 августа 2011

У меня есть модель Техники, принадлежащая Пользователю с потомками: has_many: посредством ассоциации TechniqueRelationship, которая связывает объект техники с другим объектом техники:

class User < ActiveRecord::Base
    has_many :techniques

class Technique < ActiveRecord::Base
    belongs_to :user
    has_many :technique_relationships, :foreign_key => "parent_id"
    has_many :children, :through => :techniuqe_relationships, :source => :child

В моей модели Technique у меня есть метод для определения, какие из методов данного пользователя могут быть дочерними объектами этого метода:

def possible_children(user)
    user.techniques - (self.children + [self])
end

Все, что это делает, это берет методы данного пользователя и удаляет те методы, которые уже являются дочерними, а также сам объект техники, а затем возвращает коллекцию.

Я отображаю эту коллекцию в виде, а также предлагаю простую форму поиска, чтобы пользователь мог попытаться найти, какую технику он / она хотел бы добавить в детстве.

Я бы хотел иметь возможность поиска в обоих полях: name и: description описанных выше приемов с несколькими терминами поиска с помощью оператора OR, т. Е. Если пользователь вводит «armbar» и «triangle» запрос должен возвращать технику с "armbar" или "triangle", встречающимися в имени или описании.

Что будет наиболее эффективным SQL-запросом для достижения этой цели? Есть ли менее эффективный, но более простой «рельсовый способ» сделать это?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или разъяснения. Спасибо за вашу помощь.

1 Ответ

1 голос
/ 03 августа 2011

Для таких вещей я бы хотел использовать https://github.com/ernie/meta_search и https://github.com/ernie/meta_where

Если вы используете Rails2 https://github.com/binarylogic/searchlogic, то тоже самое будет делать.

...