即使我能看到它就在那里,缺少参数

时间:2014-02-03 10:49:44

标签: ruby-on-rails

这是我在paraort()屏幕中显示的参数:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"ptXYHkAUh/uvK9blLdcPiarvCYKHJ1HWhqw+dByy7PQ=",
 "account"=>{"name"=>"Hokuriku",
 "amount"=>"0",
 "is_default"=>"1"},
 "commit"=>"Save",
 "id"=>"5"}

请参阅“is_default”。但是,当我这样做时:

def update #accounts controller method
 abort(account_params.inspect);
 .
 .

..在控制器中,它只显示:

{"name"=>"Hokuriku", "amount"=>"0"}

我看不到'is_default'。顺便说一句,这一栏也是一个新增的专栏。我已经迁移了,我可以确认新列存在。此外,我已设法将该列的值输出到上一个屏幕,因此我知道该模型正在处理它。

要修复它,我会执行以下中止:

abort(params[:account][:is_default].inspect); # outputs "1"

..现在我可以看到它。所以它确实存在。

任何可能导致这种情况发生的想法?理想情况下,我希望以最简单最干净的方式处理它,以及准确理解account_params是什么,因为它似乎与params [:account:]不同。感谢

2 个答案:

答案 0 :(得分:0)

我敢打赌,这是进行过滤的account_params方法。而在params[:account]中,您可以访问原始未过滤数据。

答案 1 :(得分:0)

查看您的account_params方法。它包含许多忽略传递的参数的指令(出于安全原因)。

它很可能有一个表格:

params.require(:account).permit(:name, :amount)
如果params不包含给定键并返回匹配的哈希,

require将引发异常。允许以静默方式删除参数中未列出的所有密钥。

您可以在github上阅读有关强属性的更多信息:https://github.com/rails/strong_parameters