我正在使用cocoon在Rails 4中实现嵌套表单。 我正在尝试使用其他模型的嵌套属性更新模型。
我有填充墨盒的嵌套属性请求模型:
has_many :filled_cartridges, dependent: :destroy
accepts_nested_attributes_for :filled_cartridges, allow_destroy: true
在我的request_controller.rb更新方法中,我有:
.. some code..
@request.update(request_params)
.. some other code ..
定义request_params的地方:
def request_params
params.require(:request).permit(:name, :address,:description,
:filled_cartridges_attributes => [:cartridge_name,:client_id,:cartridge_id, :request_id,:count,:fill_date,:_destroy,:id],
end
模型filled_cartridges有列:
t.integer "client_id", null: false
t.string "cartridge_name", null: false
t.integer "cartridge_id", null: false
在我的嵌套表单中,我可以删除字段更新或添加新字段,如Railscasts教程中所示。 当我更新其中一个字段时,当我删除其中一个字段时,它也能正常工作。尝试添加具有某个值的新字段时出现错误并点击提交:
SQLite3::ConstraintException: NOT NULL constraint failed: filled_cartridges.client_id:
所以它也试图处理嵌套模型。如何使嵌套模型不会在第一时间处理,我以后需要它们,但目前我不更新我的请求模型。
注意:如果我删除嵌套的强参数,它将适用于添加和更新字段,但它不能用于销毁字段,因为它需要指定嵌套的params _destroy和id。