Я понимаю, что application_controller.rb - это место, где можно разместить все методы и т. Д., Которые вы хотели бы сделать доступными во всех своих контроллерах, поскольку все они наследуются от этого класса. Отлично.Rails эквивалент ApplicationController для моделей
Но что эквивалентно для моделей? Другими словами, я хочу место, где я могу создать пару суперклассов, на которые мои модели наследуют.
Например, у меня есть метод, который ищет разные таблицы для записей во всех CAPS через REGEXP в Mysql. Я хотел бы иметь возможность создать метод только один раз и вызвать его для разных таблиц/моделей.
Что такое Rails?
Я думал, что могу создать класс, который наследует от ActiveRecord :: Base (как и все модели), поместить туда методы и затем наследовать все мои модели из этого класса. Но мысль, что, несомненно, будет лучший способ сделать это.
Спасибо.
Редактировать
За ответ Семена я редактирую пост, чтобы показать маршруты я использую. Он работает сейчас:
# models/dvd.rb
require 'ModelFunctions'
class Dvd < ActiveRecord::Base
extend ModelFunctions
...
end
# lib/ModelFunctions.rb
module ModelFunctions
def detect_uppercase(object)
case object
...
where("(#{field} COLLATE utf8_bin) REGEXP '^[\w[:upper:]]{5,}' ").not_locked.reorder("LENGTH(#{field}), #{table}.#{field} ASC")
end
end
В конфигурации/application.rb
config.autoload_paths += %W(#{config.root}/lib)
Не используйте 'require 'model_common'' - используйте' include ModelCommon'; см. http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby – Thilo
Спасибо Thilo, ссылка в вашем ответе говорит, что нужно использовать, поэтому я попробовал что. Но попытка включить ModelCommon дает мне эту ошибку: «Ожидаемые .../app/models/model_common.rb для определения ModelCommon». Я думал, что вы «обязал» файл, а затем «включил» методы. Это неправильно? – kakubei