2011-12-19 13 views
0

私はRails v2.3.2を使用しています。'params'を使ってインスタンスを更新するのは簡単なことです

の場合:

params[:car]={"name"=>"mycar", "brand"=>"toyota"} 

私はで@carインスタンスをUDPATEしようとした:

@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.paramsは次のとおりです。

{"commit"=>"Save", "authenticity_token"=>"w/d2uI/2tK9vSZvtF9oQDjY5iBPL8fji33IZcpm9cY0=", "_method"=>"put", "action"=>"update", "id"=>"4", "controller"=>"cars", "car"=>{"name"=>"mycar", "brand"=>"toyota"} 
+0

基本的にあなたのやっていることは正しいですか、あなたはthet params [] hashを投稿してください。 – davidb

+0

@ davidb、私は私のポストを更新しました。見てください。 –

+0

これは通常、@ carに検証エラーがあることを意味しますか? '@ car.errors'は何も表示していますか? –

答えて

2

はありません、オブジェクトのように更新することはありません:

@car.update_attributes(:name=>params[:car][:name], :brand=>params[:car][:brand]) 

これは間違っています。これは、これらの属性のみを更新する場合にのみ便利です。

代わりに、常にこれを使用する:

@car.update_attributes(params[:car]) 

namebrandこれら2つの文が同じであるほか、それらでより多くのものを持っていないあなたのparamsを仮定。あなたが最初のものでやっている

は、このハッシュを構築しているということです。

{ :name => "mycar", :brand => "Toyota" } 

2つ目には、あなただけで、基本的に同じであるハッシュを通過しています違いはオブジェクトのIDです。

オブジェクトが保存されていない理由は、update_attributesを呼び出してから、オブジェクトの後に.errorsを呼び出すと保存時に発生した検証エラーが返されます。

関連する問題