Rails模型“before_filter”?

时间:2012-05-01 13:22:50

标签: ruby-on-rails ruby-on-rails-3 activerecord callback

我知道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有这样的功能吗?我希望我只是错过了一些明显的东西......

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我为此做了一个宝石。

你可以在任何ruby类中插入它,并在控制器中执行某些操作。

before_action :foobar, on: [:foo]

https://github.com/EdmundLeex/action_callback