2011-06-19 167 views
2

使用下面的代碼更新用戶密碼時,有沒有辦法使用此PostgreSQL函數crypt('<password>', gen_salt('bf'))調用數據庫函數以更新用戶詳細信息

def update 
    @player = Player.find(params[:id]) 

    respond_to do |format| 
    if @player.update_attributes(params[:player]) 
     flash[:notice] = 'Player was successfully updated.' 
     format.html { redirect_to(@player) } 
     format.xml { head :ok } 
    else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @player.errors, :status => :unprocessable_entity } 
    end 
    end 
end 
+3

你爲什麼要推給您的數據存儲的應用程序相關的關注?即使每次調用的性能更高,當您嘗試縮放時,數據庫通常是您的瓶頸。 – coreyward

+1

@coreyward:真的,但問題仍然很有趣。 :-) –

回答

1

在update-update_all方法中至少有一種方法使用純SQL。

所以更新播放器與Postgres的墓穴方法密碼,您可以做這樣的事情:

Player.update_all "password = crypt('<password>', gen_salt('bf'))", "id = #{params[:id]}" 
相關問題