鉴于以下模型
class Parent
has_many :children
end
class Child
belongs_to :parent, required: true
end
Run Code Online (Sandbox Code Playgroud)
是否可以同时创建 Parent 和 Children?
@parent = Parent.new(valid_attributes)
@parent.children.build(valid_attributes)
@parent.save
@parent.errors.messages
#=> {:"children.parent"=>["must exist"]}
Run Code Online (Sandbox Code Playgroud)
删除required: true允许记录保存。但是有没有办法让父母和孩子一起被保存,同时仍然验证父母的存在?
您可以使用 accepts_nested_attributes_for,在关联上启用嵌套属性允许您一次性创建父项和子项。
模型父.rb
class Parent < ActiveRecord::Base
has_many :children
#enable nested attributes
accepts_nested_attributes_for :children
end
Run Code Online (Sandbox Code Playgroud)
模型儿童.rb
class Child < ActiveRecord::Base
belongs_to :parent
end
Run Code Online (Sandbox Code Playgroud)
构建并保存您的对象parents_controller.rb
class ParentsController < ApplicationController
def new
@parent = Parent.new
@parent.children.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @parent }
end
end
def create
#your params should look like.
params = {
parent: {
name: 'dummy parent',
children_attributes: [
{ title: 'dummy child 1' },
{ title: 'dummy child 2' }
]
}
}
#You can save your object at once.
@parent = Parent.create(params[:parent])
#Or you can set object attributes manually and then save it.
@parent.name = params[:parent][:name]
@parent.children_attributes = params[:parent][:children_attributes]
@parent.save
end
end
Run Code Online (Sandbox Code Playgroud)
更多信息:http : //api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
| 归档时间: |
|
| 查看次数: |
5199 次 |
| 最近记录: |