Модель 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