在我正在使用的 RoR 应用程序中,客户端需要进行一些自定义 - 基本上他要求管理员能够更改其他用户的密码,并且密码更改页面与编辑个人资料详细信息的页面不同。我已经设置了自定义操作来处理这个问题,即我自己在用户控制器中的 change_password 操作。
Users Controller Actions
def change_password
@user = User.find(params[:id])
end
def update_password # I post to this
@user = User.find(params[:id])
if @user.update_attributes!(params[:user])
redirect_to users_path, :notice => "User updated."
else
redirect_to users_path, :alert => "Unable to update user."
end
end
这是 routes.rb 条目
devise_for :users, :skip => [:registrations]
as :user do
get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
put 'users' => 'devise/registrations#update', :as => 'user_registration'
end
resources :users
...
match "/users/:id/change_password" =>"users#change_password", :as=>:change_password_user, :via=>:get
match "/users/:id/update_password" => "users#update_password", :as=>:update_password_user, :via=>:post
这是我的用户模型
class User < ActiveRecord::Base
rolify
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable, :registerable,
devise :database_authenticatable, #:registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :role_ids, :as => :admin
attr_protected :username, :name, :email, :password, :password_confirmation, :remember_me
validates_uniqueness_of :username
validates_presence_of :username, :email
validates_uniqueness_of :email
end
但是我不断收到这个质量属性分配错误
Can't mass-assign protected attributes: password, password_confirmation
奇怪的是我已将所有这些属性设置为accessible_protected。我可以编辑其他用户的详细信息,但不能编辑他们的密码。这里发生了什么?