在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
控制器中)?
答案 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