2012-03-01 10 views
2

私は、このエラーについてたくさんの読み:Railsの質量アサイン保護属性はできません

WARNING: Can't mass-assign protected attributes: contact_id, country_id, winery 

をしかし、それは現れた理由を私は理解していません。私はRails 3.0.5を使用しました(そしてその時点で3.1に切り替える必要はありません)。

マイログ:

Started POST "/ws/webapp/services/push_item" for 127.0.0.1 at Thu Mar 01 18:45:16 +0100 2012 
    Processing by Webapp::ServicesController#push_item as JSON 
    Parameters: {"wine"=>{"contact_id"=>"<null>", "country_id"=>"1", "id"=>"3FAE414B-97B2-4C05-8A02-8AAC3F3B89F6", "winery"=>"New wine"}, "authenticity_token"=>"Da/2MDivaxxmS1zb7x6EK63xARnd/RrpmFoWtsOHock=", "locale"=>"ws"} 
    Wine Load (0.4ms) SELECT `wines`.* FROM `wines` WHERE `wines`.`id` = '3FAE414B-97B2-4C05-8A02-8AAC3F3B89F6' AND `wines`.`user_id` = 1 LIMIT 1 
WARNING: Can't mass-assign protected attributes: contact_id, country_id, winery 
3FAE414B-97B2-4C05-8A02-8AAC3F3B89F6 
    SQL (0.2ms) BEGIN 
    SQL (0.2ms) ROLLBACK 
Completed 200 OK in 245ms (Views: 6.1ms | ActiveRecord: 9.5ms) 

だから、要求(更新)が動作しません。 3つのフィールドcontact_id、country_id、wineryは私のデータベースにあります。

+0

OK。 パラメータにワイン[:id]を送信しているために問題があるようです。私はちょうど今すぐ送る:ワインのparamsのうち、それはOKです。 –

答えて

1

あなたはおそらくそれで、このどこかのような行で、あなたのモデルにattr_protectedを使用している:

attr_protected :contact_id, :country_id, :winery 

あなたが大量に割り当て、それらの属性にできるようにしたい場合は、あなたがそれを削除する必要がありますライン。

+1

いいえ!自分のモデルでこのラインを使用しなかった...私のウェブサイトでオブジェクトを更新できることに注意してください。上記の例は、デバイスからモデルを更新するためのものです。 –

+0

どこにでも "attr_protected"がないこの問題があります。 –

1

Railsは、CSRF/XSS攻撃を防ぐためにフォームを生成する際に真正性トークンを使用します。モバイルアプリケーションから電話をかけている場合、このトークンは表示されず、何らかのエラーが表示されます。あなたのアプリはRailsのアプリの外の要求を受け入れるために必要がある場合

、あなたが使用してこれらのアクションのためにこれらの保護を無効にする必要があります:

protect_from_forgery :except => :update 

または

skip_before_filter :verify_authenticity_token 
+0

私のログを見て、私はauthenticity_tokenを送る...;) –

関連する問題