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

时间:2012-06-27 14:57:57

标签: ruby-on-rails

我有一个模型,例如:

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方法?或任何其他可能完成相同任务的替代方案?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用实例变量解决此问题,并从控制器执行+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

答案 1 :(得分:2)

我认为在大多数情况下,活动记录回调周期会对您造成伤害,其中包括。我建议您使用一个协调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

答案 2 :(得分:2)

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