3

我有一个模型,例如:

class Account < ActiveRecord::Base

  before_create :build_dependencies

  def build_dependencies
    # use nifty params to build this related object
    build_nifty_object(params)
  end

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

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

有没有巧妙的方法将这些参数传递给 before_create 方法?或者任何其他可能完成相同任务的替代方案?

谢谢!

4

3 回答 3

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
于 2012-06-27T15:05:05.833 回答
2

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

于 2012-06-27T16:22:53.663 回答
2

我相信活动记录回调循环在大多数情况下都会伤害到你,包括这一点。我建议您使用协调 Account 和 nifty-object 的创建的服务对象,而不是使用 before_create。

我假设您希望 nifty-object 了解该帐户,因此我将其传递给它的 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
于 2012-06-27T15:12:53.133 回答