我正在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
以下是authenticate方法的定义(在User模型类中):
def self.authenticate(username, password)
@user = User.where(["username = ? AND password = ?", username, password])
return @user
end
问题是我收到一条错误消息:
undefined method `id' for #<ActiveRecord::Relation:0x92dff10>
我确认我尝试登录的用户确实存在于数据库中(除了它尝试获取用户的id,并且该指令包含在if if in case 0从authenticate方法返回的情况下)。
为什么我收到此错误消息?知道当我将User.where
更改为User.find
时,它运行正常!
谢谢!
答案 0 :(得分:1)
User.where("some_conditions")
将返回一个User对象数组(简单来说),A User.find
可以返回一个数组或一个对象。(我不确定因为我不知道你是怎么回事使用它)
到目前为止,您看到的是ActiveRecord :: Relation,这是我们在Rails 3模型上调用find或where或order方法时返回的内容。
此外,您将密码存储为普通字符串,这是一个坏主意,您应该使用一些可用的路由认证插件,如Devise或Authlogic。