JSONに問題はありません。問題はセキュリティの1つです。 Railsは、デフォルトで特定の属性を作成または更新することを巨大なハッシュから保護します。これは、「質量割り当て」という用語を使用するときにエラーが参照しているものです。
あなたが投稿JSON:
Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"}, "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}
はid
created_at
とupdated_at
フィールドが含まれています。このJSONがアクションに渡され、ハッシュがmodel_object.update_attributes(hash_fields)
で使用されると、このエラーが発生します。このエラーを回避するには、ハッシュからフィールドを削除して後で割り当てることができます。理想的には、ActiveRecordが魔法を働かせて無視するだけです。
あなたは本当にあなたがそのような操作を行うことができ、それらを割り当てる必要がない場合:
model_object.id = id_variable
model_object.created_at = created_at_variable
model_object.updated_at = updated_at_variable
model_object.save
はEDIT1(IDをバックパッシングについてのコメントを対処するために):
あなたがRailsのRESTモデルを使用している場合コントローラ/:id/action urlを呼び出すと、その情報が既にURLに埋め込まれているため、IDを渡す必要はありません。これはparams[:id]
でアクセスし、params[:model_name]
経由でハッシュすることができます(Railsモデルに従います)。
あなたは何か違うことをやっているとID はその後、あなたは、単にid = params[:model_name][:id].delete
を行うことができますし、それはハッシュからIDを削除し、1回の呼び出しで値を返します戻って渡されるJSONにする必要があります。それは理想的ではありませんが、ピンチで仕事を終わらせることができます。
しかし、更新では常にIDは返される必要がありますが、更新はされません。私はそれが私の最大の懸念だと思う。バックボーンにタイムスタンプを送信しないと、返されませんが、IDを送信する必要があります。私はそれが私がとても混乱している理由だと思う。レールがどのように「私を守っているか」を見ることができますが、私はこの機会にこれをなぜ見ているのか知りたいのですが。 – pedalpete
恐ろしく、あなたの更新のために感謝します。あなたのコメントまで私は気づいていなかったそのモデルについて、私は安らかなアップデートをしていませんでした。今、私は安心して行くかどうか、そしてなぜこの返答を得ているのか理解するオプションを持っています。 – pedalpete
ちょうどこれまでのフォローアップ - 私は同じ問題にぶち当たっていて、私の場合は「更新」のIDも削除していますが、「ベスト」の解決策が何か不思議です。埋め込まれた属性やメソッドの戻り値(計算されたラベルなど)として返されるため、更新することもできません。これをもっときれいに扱うためのレールコンベンションはありますか? – MBHNYC