我很困惑为什么,在一个示例文章控制器中,创建方法正在使用强参数,但新方法不是?
def new
@article = Article.new
end
def create
@article = Article.new(article_param)
if @article.save
redirect_to @article
else
render "new"
end
end
答案 0 :(得分:4)
因为strong_parameters在更新之前存在白名单参数或创建记录。在new
或edit
操作时,对数据库记录没有任何操作,并且没有必要将任何参数列入白名单。在update
和create
控制器操作上,对数据库执行操作,并且禁止列入任何未列入白名单的参数。
同样rails guides显示相同的定义:"使用强参数时,禁止在活动模型批量分配中使用操作控制器参数,直到它们被列入白名单。这意味着您必须有意识地选择允许批量更新的属性,从而防止意外暴露不应暴露的内容。"
最常见的示例是:在您的浏览器中,您可以修改字段名称并将<input name=user[name] ...>
更改为<input name=user[admin] ...>
,然后将表单更改值更改为&#39; 1&#39;并提交。如果没有强参数,user[:admin]
是一个有效参数,并在数据库中进行更改。此外,在new
或edit
操作中,不存在对数据库产生任何影响的风险,因为您只是向浏览器发送表单。
答案 1 :(得分:1)
新方法只是实例化一个新对象。 create方法负责分配属性并将它们写入数据库。
在调用.new之后,你的文章只是一个空壳,因此不需要参数。
使用新文章,以便页面可以呈现正确的表单。此外,在新操作中,控制器中没有任何参数,用户只需单击一个新按钮,即可接收视图以创建新文章。
您的参数代表用户输入的数据,直到表单提交后才会显示。
答案 2 :(得分:0)
新方法是表单本身,用户输入数据。它通过create方法提交,您的应用程序将识别您的表单规范,并接受或拒绝用户输入的元素。例如,如果您有一个分配给表元素的整数,并且用户在表单中输入浮点数/小数,则新表单将接受输入但实际上只创建一个整数,该数字在视图中呈现时输入的数字不带小数