Rails 4中带有验证的嵌套参数

时间:2015-04-24 08:01:35

标签: ruby-on-rails ruby ruby-on-rails-4.2

我正在使用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。

0 个答案:

没有答案