更新一下这个文章:
Rails 5 之后的
belongs_to
增加了一个optional
选项 。想使用嵌套创建不报 "must exist" 的 error message 那么这个optional: true
必须设置增加一对多关联的例子
class Event < ApplicationRecord
has_many :items
accepts_nested_attributes_for :items
end
class Item < ApplicationRecord
belongs_to :event, optional: true
end
params example:
"event": {
"name": "我天真无邪的事件",
"items_attributes": [
{
"at": "2019-12-12 18:00:00",
"value": 11
},
{
"at": "2019-12-12 18:01:00",
"value": 12
}
]
}
strong params:
params.require(:event).permit(:name, items_attributes: [:at, :value])
@event = Event.create( params.require(:event).permit(:name, items_attributes: [:at, :value]) )
简单的更新一下 。不做详细解释了 。以上
accepts_nested_attributes_for 类方法 这个方法可以在该model上生成一个属性writer
eg:
为model Book新增两个新方法
author_attributes=(attributes)
page_attributes=(attributes)
class Book < ActiveRecord::Base
has_one :author
has_many :pages
accepts_nested_attributes_for :author, :pages
end
一对一关联
class Member < ActiveRecord::Base
has_one :avatar
accepts_nested_attributes_for :avatar
end
开启了一对一的关联嵌套之后可以用这样的方法一次性创建Member
params = { :member => { :name => "Jack", :avatar_attributes => { :icon => "test"} } }
下面是create
member = Member.create(params[:member])
params = { :member => { :avatar_attributes => { :id => '2', :icon => "sad" } } }
member.update_attributes(params[:member])