У меня есть модель Техники, принадлежащая Пользователю с потомками: 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-запросом для достижения этой цели? Есть ли менее эффективный, но более простой «рельсовый способ» сделать это?
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или разъяснения. Спасибо за вашу помощь.