在Rails 4中包含强参数的快捷方式:不列出所有字段

时间:2014-02-28 05:04:39

标签: ruby-on-rails strong-parameters

我从Rails 4开始。在控制器中遇到与许可参数相关的新安全功能强参数。

http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

这很好,但我们需要列出模型中的所有字段。是否有一种简单的方法可以在下面列出字段。

感谢。

3 个答案:

答案 0 :(得分:1)

如果您在模型中说了大约20列,并且您不需要在控制器中指定允许内的所有列,那么您可以执行一个快捷方式,然后将其作为:

params.require(:person).permit!

这将允许模型中的所有属性

答案 1 :(得分:0)

这是一个快速的“入门”提示,关于你的模型Foo有很多字段的情况......而不是将它们全部列入白名单,自动生成一个列表,然后删除那些你知道不应该大规模的列表 - 分配

在rails控制台中,您可以非常轻松地获取所有字段的符号列表,将其复制/粘贴到permit(...)方法,然后删除那些不应该按质量分配的字符:id,:ctreated_at, :admin等

Foo.attribute_names.map(&:to_sym).sort
> [:address, :admin, :created_at, :id, :name, :updated_at]

这比使用.permit只需要几秒钟!方法,但从安全的角度为您提供更好的起点。

答案 2 :(得分:-1)

在Rails 4中引入了

Strong Parameters

  

它提供了一个保护最终用户属性的界面   分配。这使得Action Controller参数被禁止   用于活动模型批量分配,直到它们被列入白名单。

基本上,这意味着只有某些参数值将通过您的控制器发送到模型(从而允许您更好地控制Rails处理哪些数据)


<强> DRY

如果你想为多个控制器使用强参数,或者只是想干扰这个过程,我们就用这个:

#app/controllers/application_controller.rb
private

#Strong Params
def permitted_params
    @resource =  self.resource_class
    @model = "#{@resource}".downcase.to_sym

    attributes = @resource.attribute_names + %w(custom items here)
    params.permit(@model => attributes)
end