Ruby on rails 使用';参数';
我使用的是Rails v2.3.2 如果: 我试图通过以下方式提取Ruby on rails 使用';参数';,ruby-on-rails,ruby-on-rails-2,Ruby On Rails,Ruby On Rails 2,我使用的是Rails v2.3.2 如果: 我试图通过以下方式提取@car实例: @car.update_attributes(params[:car]) 但是@car没有更新 为什么我不能这样更新?我是否必须通过如下指定每个字段来更新@car: @car.update_attributes(:name=>params[:car][:name], :brand=>params[:car][:brand]) 而不是将params[:car]作为一个整体进行更新,如: @car.up
@car
实例:
@car.update_attributes(params[:car])
但是@car
没有更新
为什么我不能这样更新?我是否必须通过如下指定每个字段来更新@car
:
@car.update_attributes(:name=>params[:car][:name], :brand=>params[:car][:brand])
而不是将params[:car]
作为一个整体进行更新,如:
@car.update_attributes(params[:car])
有人能给我解释一下吗
p.S.参数是:
{"commit"=>"Save", "authenticity_token"=>"w/d2uI/2tK9vSZvtF9oQDjY5iBPL8fji33IZcpm9cY0=", "_method"=>"put", "action"=>"update", "id"=>"4", "controller"=>"cars", "car"=>{"name"=>"mycar", "brand"=>"toyota"}
否,永远不要像这样更新对象:
@car.update_attributes(:name=>params[:car][:name], :brand=>params[:car][:brand])
这是错误的。只有当您只想更新这些属性时,这才有用
请始终使用此选项:
@car.update_attributes(params[:car])
假设您的参数中除了name
和brand
之外没有其他内容,那么这两个语句是相同的
在第一个示例中,您正在构建此哈希:
{ :name => "mycar", :brand => "Toyota" }
在第二个示例中,您将通过一个基本相同的散列,唯一不同的是对象的id
至于对象未保存的原因,请尝试调用
update\u attributes
,然后在该对象上调用.errors
,这将返回保存时遇到的任何验证错误。基本上,您所做的是正确的,请发布参数[]哈希?!@大卫,我更新了我的帖子。请看一下。通常这意味着@car有一个验证错误?@car.errors
是否显示任何内容?@davidb,@car还包含made:created\u at,:updated\u at字段,这可能是个问题吗?@davidb,是的,看起来像是验证错误,尽管@errors={}是空的。但在更新期间更改:name的值后,它将成功更新。有趣的是,为什么在更新时没有显示验证消息,但在创建具有无效值的新实例时会显示验证消息。。。
{ :name => "mycar", :brand => "Toyota" }