12

我知道 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,就不会运行method1。Rails 有这样的功能吗?我希望我只是在这里错过了一些明显的东西......

4

2 回答 2

12
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

于 2012-05-01T14:02:27.327 回答
2

我为此做了一颗宝石。

您可以将其插入任何 ruby​​ 类,并在控制器中执行类似的操作。

before_action :foobar, on: [:foo]

https://github.com/EdmundLeex/action_callback

于 2017-01-08T07:01:38.843 回答