Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用';参数';_Ruby On Rails_Ruby On Rails 2 - Fatal编程技术网

Ruby on rails 使用';参数';

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

我使用的是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.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" }