Где должен быть размещен модуль расширения ActiveRecord?

#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. Я не голосовал против вас. Какой смысл голосовать за понижение и помечать как правильный? Я не просто указывал, что это работает, но вы указывали, что это может быть невозможно повторно использовать.