我有一个模型,例如:
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方法?或任何其他可能完成相同任务的替代方案?
谢谢!
答案 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
方法从模型中访问。