Railsアプリにいくつかの機能があり、Railsに渡すパラメーターが、コントローラーのリクエストとパラメーターの間のどこかにカプセル化されています。
以前は問題ではありませんでしたが、最近問題が発生したため、なぜ発生したのかを調べてみることにしました。私は運がなかったので、ここの誰かが私を正しい方向に向けてくれることを望んでいます。
クライアントリクエストのペイロードは次のようになります。
{
"id"=>"1",
"email" => "peter.hamilton10@imperial.ac.uk",
"first_name" => "Peter",
"last_name" => "Hamilton",
"year" => 3,
"private_attr" => "something"
}
そしてレールでは、ログはこれを示しています
Started PUT "/students/1" for 127.0.0.1 at 2012-11-29 13:20:56 +0000
Processing by StudentsController#update as JSON
Parameters: {"id"=>"1",
"email" => "peter.hamilton10@imperial.ac.uk",
"first_name" => "Peter",
"last_name" => "Hamilton",
"year" => 3,
"private_attr" => "something",
"student" => {
"email"=>"peter.hamilton10@imperial.ac.uk",
"first_name"=>"Peter",
"last_name" => "Hamilton",
"year"=>3
}
}
このstudent
属性はどこから来ており、フィールドはどのように生成されますか?
一括割り当てできない属性が表示されないことを知っているので(上に示したようにprivate_attr
)、現在のコントローラーのモデルの抽出フィールドを想定していますが、それ以外の場合は少し途方に暮れています...
更新:モデル
# Schema
# create_table "students" do |t|
# t.string "email"
# t.string "first_name"
# t.string "last_name"
# t.integer "year"
# t.integer "private_attr"
# end
class Student < ActiveRecord::Base
attr_accessible :email, :first_name, :last_name, :year
end
(注:private_attrが通過することは期待していません。テストとして実行しただけで、役立つかもしれないと思いました)
リクエストは実際にはフォームからのものではなく、手動で生成されたajaxリクエストからのものです。