2010-10-30 77 views
0

我在Rails中構建一個小應用程序,現在我正在嘗試對用戶進行身份驗證。活動記錄查詢問題

所以我就在控制類此方法:

def login 
     if @user = User.authenticate(params[:txt_login], params[:txt_password]) 
      session[:current_user_id] = @user.id 
      redirect_to root_url 
     end 
    end 

這裏是身份驗證方法的定義(User模型類中):

def self.authenticate(username, password) 
     @user = User.where(["username = ? AND password = ?", username, password]) 
     return @user 
    end 

的問題是,我得到一個錯誤消息說:

undefined method `id' for #<ActiveRecord::Relation:0x92dff10> 

我確認用戶我試圖登錄真正的exis ts(除了它試圖獲取用戶的id,並且這個指令被包裝在一個if中,以防萬一從認證方法中返回0個用戶)。

爲什麼我會得到這個錯誤信息?知道當我改變User.whereUser.find它工作正常!

謝謝!

回答

1

User.where("some_conditions")將返回用戶對象的數組(簡單地說),A User.find可以返回一個數組或一個對象。(我不知道,因爲我沒有看到你如何使用它)

至於你所看到的是ActiveRecord :: Relation,當我們在Rails 3 Models上調用一個find或一個where或一個order方法時,就會返回這個結果。

此外,您將密碼存儲爲純字符串,這是一個壞主意,您應該使用一些可用的Rails身份驗證插件,如Devise或Authlogic。

+0

謝謝。對於密碼問題,我確定我只是搞亂了Rails,它不是一個生產代碼,但我可能會看看這些插件。 – 2010-10-30 23:05:40