这是我在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:]不同。感谢
答案 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