Модель Rails "before_filter"?

Я знаю, что before_filter предназначен только для контроллеров в Rails, но мне хотелось бы что-то подобное для модели: в любой момент, когда вызывается метод в моей модели, я хотел бы запустить метод, который определяет, должен ли вызываемый метод запустить. Концептуально, что-то вроде этого:

class Website < ActiveRecord::Base
  before_filter :confirm_company

  def confirm_company
    if self.parent.thing == false?
      return false
    end
  end

  def method1
    #do stuff
  end

end

Поэтому, когда я вызываю @website.method1, он сначала вызывает confirm_company, и если я верну false, не будет запускать метод1. У Rails есть такие функции? Надеюсь, я просто упустил что-то очевидное здесь...

Ответ 1

class MyModel
    extend ActiveModel::Callbacks
    define_model_callbacks :do_stuff

    before_do_stuff :confirm

    def do_stuff
        run_callbacks :do_stuff do
            #your code
        end
    end

    def confirm
        #confirm
    end
end

Я действительно не уверен, что это сработает, но вы можете попробовать, так как у меня действительно нет времени. Взгляните на это: http://api.rubyonrails.org/classes/ActiveModel/Callbacks.html

Ответ 2

Я сделал драгоценный камень только для этого.

Вы можете подключить его к любому классу ruby ​​и сделать что-то вроде контроллера.

before_action :foobar, on: [:foo]

https://github.com/EdmundLeex/action_callback