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 に答える