У меня есть несколько методов, которые я хотел бы совместно использовать между моделями вместо того, чтобы копировать и вставить их. В контроллере я могу сделать это путем помещения методов в application_controller.rb, который автоматически включен в каждый контроллер. Существует ли подобная вещь для моделей?
Спасибо!
Вы можете создать файл с именем functions.rb
или что-то подобное в каталоге lib
вашего приложения Rails. Сделайте файл, названный в честь модуля, для его автозагрузки при запуске Rails. Например, если бы я хотел добавить отметку к нескольким моделям, я бы создал файл с именем lib / flagging.rb
, и он бы выглядел так:
module Flagging
# Flags an object for further review
def flag!
self.update_attribute(:flagged, true)
end
# Clears all flags on an object
def deflag!
self.update_attribute(:flagged, false)
end
end
В каждой модели я хотел добавить это функциональность, я бы сделал следующее:
class Foo < ActiveRecord::Base
include Flagging
end
Тогда я смогу сделать что-то вроде:
foo = Foo.create
foo.flag!
Существует несколько способов совместного использования методов между двумя классами моделей.
Вы можете либо а) сделать что-то похожее на application_controller и создать класс модели, из которого другие могут создавать подклассы, либо б) использовать модуль.