#ruby-on-rails #ruby #ruby-on-rails-4
#ruby-on-rails #ruby #ruby-on-rails-4
Вопрос:
У меня есть этот модуль:
class ActiveRecord::Base
class << self
def has_simple_search(*attrs)
raise 'has_simple_search expects at least one attribute' if attrs.empty?
instance_eval do # because this is ActiveRecord::Base, the class inherits this
class_attribute :simple_search_fields
self.simple_search_fields = attrs.flatten
def simple_search(search_string)
return find(:all) if search_string.nil? || search_string.blank?
attrs = self.simple_search_fields
like_s = attrs.map{|f| "#{self.table_name}.#{f.to_s} REGEXP ?"}.join(' OR ')
terms = search_string.split(' ').map{|s| Regexp.escape(s.strip)}
where(Array.new(attrs.count, terms.join('|')).unshift(like_s))
end
end
end
end
end
https://gist.github.com/Florian95/2478919
Я пытаюсь реализовать это в своем приложении Rails, но не могу найти, куда мне его поместить.
Также: можно ли повторно использовать этот код для rails 4?
Ответ №1:
Вы должны поместить его в config/initializers
.
Я действительно не могу сказать, можно ли его повторно использовать в Rails 4, попробуйте.
Комментарии:
1. Нужно ли мне что-то добавлять к моделям? Насколько я понимаю, модель #simple_search (запрос) должна работать после того, как я создам инициализатор. Это верно?
2. Да, вы правы. Все, что вам нужно, это файл с точным содержимым, указанным выше, и он должен работать. Если это не так, то, вероятно, он не совместим с Rails 4.
3. Не мог бы человек, проголосовавший против этого, пожалуйста, объяснить, почему? Спасибо.
4. Я пробовал и работал с инициализатором. Но он не очень удобен для повторного использования.
5. Я не голосовал против вас. Какой смысл голосовать за понижение и помечать как правильный? Я не просто указывал, что это работает, но вы указывали, что это может быть невозможно повторно использовать.