我一直在我的 rails 应用程序中看到一些功能,其中我传递给 rails 的参数被封装在控制器中的请求和参数之间的某个位置。
以前没关系,但我最近遇到了一个问题,因此决定尝试找出它发生的原因。我没有运气,希望这里有人能指出我正确的方向。
我的客户端请求有效负载如下所示:
{
"id"=>"1",
"email" => "peter.hamilton10@imperial.ac.uk",
"first_name" => "Peter",
"last_name" => "Hamilton",
"year" => 3,
"private_attr" => "something"
}
在rails中,日志显示了这一点
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 请求。