【发布时间】:2012-08-21 20:34:29
【问题描述】:
对 Rails 还很陌生,如果我误解了任何内容,请原谅我。我有一个如下所示的用户模型。理想情况下,我想做的是让普通用户只能更新他们的密码,但让管理员能够更改他们的用户名、电子邮件等......
class User < ActiveRecord::Base
# Default auths
attr_accessible :password, :password_confirmation, :remember_me
# Admin auths
attr_accessible :login, :username, :email, :password, :password_confirmation, :remember_me, :role_ids, :as => :admin
end
要以管理员身份更新记录,我执行以下操作:
@user.update_attributes(params[:user], :as => :admin)
但是假设我想以非管理员身份更新用户记录:
@user.update_attributes(params[:user])
我收到以下异常:
ActiveModel::MassAssignmentSecurity::Error in UsersController#update
Can't mass-assign protected attributes: email, username
我希望忽略不可访问的参数,只更新可访问的属性,而目前整个更新失败。这可能吗?更重要的是,这是推荐的做事方式吗?在调用 update_attributes 之前手动去除不可访问的参数会更好吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord mass-assignment