Rails请求参数中出现的其他属性

时间:2012-11-29 13:38:30

标签: ruby-on-rails ruby ruby-on-rails-3 httprequest

我在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请求。

2 个答案:

答案 0 :(得分:0)

查看包装参数:

http://edgeapi.rubyonrails.org/classes/ActionController/ParamsWrapper.html

我不知道你是否使用Rails 4,但这是最新版本的内容。

答案 1 :(得分:0)

在控制器中添加以下代码:

wrap_parameters:model,include:Model.column_names + [:attr]

模型 - 您的模型,:attr - 附加属性