需要在控制器中为has_one autosave中的自动保存子对象做什么:true?

时间:2015-07-18 17:59:22

标签: ruby-on-rails

在Rails与autosave: true的has_one关系中,我们是否需要在create中生成子对象并设置params以允许子对象的mass_assignment,如果我们希望子对象与其父对象一起保存?

例如,customer has_one address

class Customer < ActiveRecord::Base
   has_one :address, autosave: true
end

customers控制器中,注意到已构建address对象:

def new
  customer = Customer.new
  customer.build_address
end

以下是我们的问题:在create中,以下代码足以与address一起神奇地保存customer(假设address上有customer字段观点)?

def create
  customer = Customer.new(new_params)
  if customer.save  #is `address` saved along with `customer` magically?
     redirect_to ...
  end
end

或者,如果上面的代码无法实现,那么我们需要做些什么来自动保存address(例如生成address对象或/并为address对象的mass_assignment设置参数在customers控制器中)?

1 个答案:

答案 0 :(得分:1)

在保存客户之前,您还需要为地址分配属性。

e.g. customer.address.landmark = "sony center"

参考此http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html

或者您可以使用nested_attributes  请参阅此http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html