我對rails的新手很少,而且我正在開發一個涉及用戶帳戶的小應用程序。目前,用戶可以更改/更新他們的姓名,電子郵件和密碼。用戶也有一個唯一的用戶名,但我想阻止用戶改變它。我將如何去防止這種情況?如何防止用戶在創建帳戶後更改用戶名
我已經在attr_accessible中包含用戶名,以便在註冊時創建它,但是我想以某種方式在用戶名出現後將其刪除。目前我唯一的限制是缺少用戶名編輯表單,但我知道這不會阻止創意用戶發出PUT請求來更改它。
我對rails的新手很少,而且我正在開發一個涉及用戶帳戶的小應用程序。目前,用戶可以更改/更新他們的姓名,電子郵件和密碼。用戶也有一個唯一的用戶名,但我想阻止用戶改變它。我將如何去防止這種情況?如何防止用戶在創建帳戶後更改用戶名
我已經在attr_accessible中包含用戶名,以便在註冊時創建它,但是我想以某種方式在用戶名出現後將其刪除。目前我唯一的限制是缺少用戶名編輯表單,但我知道這不會阻止創意用戶發出PUT請求來更改它。
做到這將是它們傳遞到update_attributes
函數之前刪除參數在控制器的更新操作,如下面的最簡單的方法:或者
#UsersController
def update
params[:user].delete(:username)
@user = user.find(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully updated user."
redirect_to @user
else
render :action => 'edit'
end
end
,你可以使用動態質量 - 分配安全性如this RailsCast所示,這個要點是您可以覆蓋模型中的mass_assignment_authorizer
函數以添加要訪問批量分配的任何額外屬性。使用這個想法,你可以這樣做:
class User < ActiveRecord::Base
attr_accessible #what ever other stuff you wan't to accessable
private
def mass_assignment_authorizer
new_record? ? super + [:username] : super
end
end
只需按任何試圖改變...
class User
before_update :revert_username_if_changed, :if => Proc.new { |u| u.username_changed? }
def revert_username_if_changed
self.username = self.username_was
end
end
很不錯的。非常感謝 – 2012-07-14 02:05:32