Как совместно использовать код через модели? (Направляющие 2.3)

У меня есть несколько методов, которые я хотел бы совместно использовать между моделями вместо того, чтобы копировать и вставить их. В контроллере я могу сделать это путем помещения методов в application_controller.rb, который автоматически включен в каждый контроллер. Существует ли подобная вещь для моделей?

Спасибо!

13
задан Yuval Karmi 28 February 2010 в 22:28
поделиться

3 ответа

Вы можете создать файл с именем 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!
16
ответ дан 1 December 2019 в 21:37
поделиться

Существует несколько способов совместного использования методов между двумя классами моделей.

  • Используйте наследование , если модели связаны друг с другом, например общий родительский класс, содержащий методы, или один подкласс другого, содержащего методы.
  • Используйте модули / миксины , которые могут использоваться несколькими моделями
2
ответ дан 1 December 2019 в 21:37
поделиться

Вы можете либо а) сделать что-то похожее на application_controller и создать класс модели, из которого другие могут создавать подклассы, либо б) использовать модуль.

3
ответ дан 1 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: