我有一个RPG网站,我希望用户能够在注册时设置他们的名字,而不是在他们编辑他们的个人资料时。但我希望作为管理员能够编辑它。
由于我在更新操作中使用update_attributes,我认为他们无法使用我提供的经典表单更新其first_name。
有没有办法使用ActiveRecord验证或仅在控制器中执行此操作?
提前致谢!
答案 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])
你可以通过用户模型进行操作,但你必须有一些方法将编辑用户的状态传递给模型,然后添加一堆条件验证。