2012-07-14 100 views
0

我對rails的新手很少,而且我正在開發一個涉及用戶帳戶的小應用程序。目前,用戶可以更改/更新他們的姓名,電子郵件和密碼。用戶也有一個唯一的用戶名,但我想阻止用戶改變它。我將如何去防止這種情況?如何防止用戶在創建帳戶後更改用戶名

我已經在attr_accessible中包含用戶名,以便在註冊時創建它,但是我想以某種方式在用戶名出現後將其刪除。目前我唯一的限制是缺少用戶名編輯表單,但我知道這不會阻止創意用戶發出PUT請求來更改它。

回答

2

做到這將是它們傳遞到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 
+0

很不錯的。非常感謝 – 2012-07-14 02:05:32

0

只需按任何試圖改變...

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