这是我在rails abort()屏幕中显示的参数:
{"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:不同。谢谢
发布于 2014-02-03 18:55:40
我敢打赌,是account_params方法做了过滤。而在params[:account]中,您可以访问未经过滤的原始数据。
发布于 2014-02-03 18:55:58
看看你的account_params方法。它包含许多忽略传递的参数的指令(出于安全原因)。
它很可能有一种形式:
params.require(:account).permit(:name, :amount)如果参数不包含给定的键并返回匹配的哈希,则require将引发异常。允许以静默方式删除所有未在参数中列出的键。
你可以在github上阅读更多关于强属性的内容:https://github.com/rails/strong_parameters
https://stackoverflow.com/questions/21525315
复制相似问题