如何限制params Rails传递给一个对象?

时间:2011-09-08 21:17:20

标签: ruby-on-rails ruby ruby-on-rails-3 security

如何排除(或明确包含)传递给对象的参数,如下例所示:

  def create
    @something = Something.new(params[:something])
    ...
    @something.save    
  end

比如说something有一个字段trust_level,不应该通过公共用户设置(允许创建对象)。即使提供的表单不包含此字段,也很容易通过HTTP发送此字段。那么如何防止将此字段传递给new(或update_attributes)方法?

2 个答案:

答案 0 :(得分:4)

使用attr_accessible定义可用于质量分配的内容。

(那是一个link to the docs,但这有点难以辨别,所以又来了。)

答案 1 :(得分:1)

另一种方式是filter out unwanted参数。以防万一你只想摆脱一个特定的参数,你不能使用attr_accessible(这是一个更好的解决方案)。

hsh.reject {| key, value | block } → a_hash
     

Hash#delete_if相同,   但是工作(并返回)hsh的副本。相当于   hsh.dup.delete_if。

enum.reject {| obj | block } → array
enum.reject → an_enumerator