首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缺少参数,即使我可以看到它在那里

缺少参数,即使我可以看到它在那里
EN

Stack Overflow用户
提问于 2014-02-03 18:49:44
回答 2查看 41关注 0票数 0

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

代码语言:javascript
运行
复制
{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"ptXYHkAUh/uvK9blLdcPiarvCYKHJ1HWhqw+dByy7PQ=",
 "account"=>{"name"=>"Hokuriku",
 "amount"=>"0",
 "is_default"=>"1"},
 "commit"=>"Save",
 "id"=>"5"}

参见"is_default“。但是,当我这样做的时候:

代码语言:javascript
运行
复制
def update #accounts controller method
 abort(account_params.inspect);
 .
 .

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

代码语言:javascript
运行
复制
{"name"=>"Hokuriku", "amount"=>"0"}

我看不到'is_default‘。顺便说一句,这个列也是一个新添加的列。不过,我已经迁移了,并且我可以确认新列是否存在。此外,我已经设法将该列的值输出到前一个屏幕,这样我就知道模型正在处理它。

为了修复它,我执行了以下中止操作:

代码语言:javascript
运行
复制
abort(params[:account][:is_default].inspect); # outputs "1"

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

你知道是什么原因导致这种情况发生吗?理想情况下,我希望以最简单、最干净的方式处理它,同时准确地理解account_params是什么,因为它似乎与params:account:不同。谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-02-03 18:55:40

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

票数 0
EN

Stack Overflow用户

发布于 2014-02-03 18:55:58

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

它很可能有一种形式:

代码语言:javascript
运行
复制
params.require(:account).permit(:name, :amount)

如果参数不包含给定的键并返回匹配的哈希,则require将引发异常。允许以静默方式删除所有未在参数中列出的键。

你可以在github上阅读更多关于强属性的内容:https://github.com/rails/strong_parameters

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21525315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档