是否有可能将params传递给模型中的before_create?

我有一个模型,例如:

class Account < ActiveRecord::Base before_create :build_dependencies def build_dependencies # use nifty params to build this related object build_nifty_object(params) end 

初始参数通过帐户#new表单上的隐藏表单标签发送。

但是没有理由/需要将这些参数保存到帐户模型中。 我只需要在NiftyObject模型中使用它们。

是否有一种聪明的方法将这些参数传递给before_create方法? 或者可能完成相同任务的任何其他替代方案?

谢谢!

您可以使用实例变量来解决此问题,并从控制器执行+1步骤:

 class Account < ActiveRecord::Base before_create :build_dependencies def assign_params_from_controller(params) @params = params end def build_dependencies # use nifty params to build this related object build_nifty_object(@params) end 

在控制器中:

  def Create account = new Account(params) account.assign_params_from_controller( ... ) account.save # this will trigger before_create end 

我相信在大多数情况下,活动记录回调周期会对您造成伤害,其中包括。 我建议你使用一个协调Account和nifty-object创建的服务对象,而不是使用before_create。

我假设你想要漂亮的对象来了解该帐户,所以我把它传递给了它的创建方法。

 class CreatesAccount def self.create(params) account = Account.new(params) return account unless account.valid? ActiveRecord::Base.transaction do account.save! NifyObject.create(params, account: account) return account end end end 

我感谢大家的回答。 但我最终还是选择了一个attr_accessor 。 通过这种方式,它不会在任何地方保存任何内容,但仍可以在before_create方法中从模型中访问。