保护要更新的属性

时间:2011-08-16 19:12:00

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord ruby-on-rails-3.1

我有一个RPG网站,我希望用户能够在注册时设置他们的名字,而不是在他们编辑他们的个人资料时。但我希望作为管理员能够编辑它。

由于我在更新操作中使用update_attributes,我认为他们无法使用我提供的经典表单更新其first_name。

有没有办法使用ActiveRecord验证或仅在控制器中执行此操作?

提前致谢!

2 个答案:

答案 0 :(得分:3)

attr_accessible :name, :as => :admin添加到您的User模型,并在注册控制器中使用@user.update_attributes(params[:user], :as => :admin)update操作应该使用@user.update_attributes(params[:user])而不使用:as => :admin选项。

有关此主题的更多信息:Rails 3.1 Overview

答案 1 :(得分:0)

通过控制器可以更轻松地完成此操作,因为控制器是您可以访问登录用户的位置。所以,在你的控制器中:

# When the form is submitted
unless @current_user.is_an_admin?
  # List of attributes to allow non-admins to change
  allowed_fields = %w[allowed_field_1 allowed_field_2]
  # Remove any non-allowed fields from the params
  params[:user].delete_if {|key, value| !allowed_fields.include?(key.to_s)}
end
@user.update_attributes(params[:user])

可以通过用户模型进行操作,但你必须有一些方法将编辑用户的状态传递给模型,然后添加一堆条件验证。