为什么在rails控制器中CREATE但不是NEW的强参数?

时间:2015-04-29 01:30:35

标签: ruby-on-rails controller

我很困惑为什么,在一个示例文章控制器中,创建方法正在使用强参数,但方法不是?

   def new
        @article = Article.new
    end

    def create
        @article = Article.new(article_param)
        if @article.save
            redirect_to @article
        else
            render "new"
        end
    end

3 个答案:

答案 0 :(得分:4)

因为strong_parameters在更新之前存在白名单参数或创建记录。在newedit操作时,对数据库记录没有任何操作,并且没有必要将任何参数列入白名单。在updatecreate控制器操作上,对数据库执行操作,并且禁止列入任何未列入白名单的参数。

同样rails guides显示相同的定义:"使用强参数时,禁止在活动模型批量分配中使用操作控制器参数,直到它们被列入白名单。这意味着您必须有意识地选择允许批量更新的属性,从而防止意外暴露不应暴露的内容。"

最常见的示例是:在您的浏览器中,您可以修改字段名称并将<input name=user[name] ...>更改为<input name=user[admin] ...>,然后将表单更改值更改为&#39; 1&#39;并提交。如果没有强参数,user[:admin]是一个有效参数,并在数据库中进行更改。此外,在newedit操作中,不存在对数据库产生任何影响的风险,因为您只是向浏览器发送表单。

答案 1 :(得分:1)

新方法只是实例化一个新对象。 create方法负责分配属性并将它们写入数据库。

在调用.new之后,你的文章只是一个空壳,因此不需要参数。

使用新文章,以便页面可以呈现正确的表单。此外,在新操作中,控制器中没有任何参数,用户只需单击一个新按钮,即可接收视图以创建新文章。

您的参数代表用户输入的数据,直到表单提交后才会显示。

答案 2 :(得分:0)

新方法是表单本身,用户输入数据。它通过create方法提交,您的应用程序将识别您的表单规范,并接受或拒绝用户输入的元素。例如,如果您有一个分配给表元素的整数,并且用户在表单中输入浮点数/小数,则新表单将接受输入但实际上只创建一个整数,该数字在视图中呈现时输入的数字不带小数