Rails Mass-assign 怎样才能取消对 references 的保护?

ruohanc · 2012年05月10日 · 最后由 ruohanc 回复于 2012年05月10日 · 7221 次阅读

学用 Rails 也有一会了,看了好些资料大概就是说 mass-assign 有两种。一种白名单一种黑名单。黑名单用 attr_protected, 白名单用 attr_accessible

那我就想知道了。是不是用了 attr_protected, 没用 attr_accessible 的时候,只要不被指定再 attr_protected 里面的属性就可以直接 mass-assign?

实际上我是碰到了这样的问题。

class Event < ActiveRecord::Base
  belongs_to :project
  ...
end

然后在创建 Event 的时候就出错了

Event.create( :project => Project.first )
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: project

楼主你用的是不是 3.2 以后的版本?默认开启了config.active_record.whitelist_attributes=true 所以等于加了一个空的attr_accessible可以关掉这个参数,在application.rb

#1 楼 @aNdReW_Qx 泪奔.......居然还有这种配置............果然如此..

#2 楼 @ruohanc 关于这个话题推荐你看一下 http://asciicasts.com/episodes/237-dynamic-attr-accessible ,另外 rails3.1 以后,mass assignment 加了一个 role 参数 http://guides.rubyonrails.org/3_1_release_notes.html#active-model 这个特性也可以利用

#3 楼 @aNdReW_Qx 恩好的... :role 参数我看过....只是觉得这不应该是解决我这个问题的办法...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号