Ruby on rails 钢轨型号“;在“U过滤器”之前;?

Ruby on rails 钢轨型号“;在“U过滤器”之前;?,ruby-on-rails,ruby-on-rails-3,activerecord,callback,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

我知道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
class网站
因此,当我调用@website.method1时,它将首先调用confirm_company,如果我返回false,将不会运行method1。Rails有这样的功能吗?我希望我只是错过了一些显而易见的事情

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

我真的不确定这是否有效,但你可以试试,因为我现在真的没有时间。看看这个:

我为这个做了一块宝石

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

before_action :foobar, on: [:foo]

你是说?是的,我想我需要回电话。但是没有一个可用的回调可以完成我想要的。我没有保存,验证,初始化。。。我正在调用一个方法。如果您的条件是MetapReading,您可以使用代理对象并委托给模型-您可以提供更多详细信息吗?我不知道你的意思…看这完全是你说的。它要求我触摸每一个模型,但从各方面考虑,这是一个非常干净的解决方案。非常感谢!酷:)如果你的模型中有重复的模式,你可以考虑把东西提取到模块中。只是一个想法。不错,但从技术上讲,模型中的方法不是一个动作,它可以是方法之前的