我如何设置'attr_accessible'以便不允许使用Ruby on Rails访问任何模型的字段?

use*_*052 16 ruby ruby-on-rails ruby-on-rails-3

如果在模型文件中我只有这个代码:

class Users < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

这意味着什么?是否可以访问与模型相关的所有属性?

我如何才能设置"attr_accessible" 没有允许访问的任何字段这种模式?

Jes*_*ott 34

刚设置:

class Users < ActiveRecord::Base
  attr_accessible #none
end
Run Code Online (Sandbox Code Playgroud)

就像Pan Thomakos所说的那样(attr_accessible是可以进行质量转换的参数数组.因此,如果您不发送任何符号,则无法访问任何参数.

这张票很有用

  • 对于未来的溢出程序 - 这对Rails 3.2有效...在Rails 4中,你将使用strong_parameters来处理这个问题https://github.com/rails/strong_parameters (2认同)

Pan*_*kos 10

默认情况下,属性都是attr_accessible(这意味着它们可以设置我的质量分配).

  • attr_accessible - 只能通过质量分配(白名单)设置此属性列表.
  • attr_protected - 无法通过质量分配(黑名单)设置这些属性.
  • attr_readonly - 除了创建记录时,不能设置这些属性.

要完全禁用质量分配,请使用以下内容:

ActiveRecord::Base.send(:attr_accessible, nil)

此命令将禁用所有活动记录对象的质量分配,但是如果要在某些情况下进行质量分配而在其他情况下不需要,则可以指定一个或多个模型来执行此命令.