活动记录查询问题

时间:2010-10-30 22:27:08

标签: ruby-on-rails activerecord

我正在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时,它运行正常!

谢谢!

1 个答案:

答案 0 :(得分:1)

User.where("some_conditions")将返回一个User对象数组(简单来说),A User.find可以返回一个数组或一个对象。(我不确定因为我不知道你是怎么回事使用它)

到目前为止,您看到的是ActiveRecord :: Relation,这是我们在Rails 3模型上调用find或where或order方法时返回的内容。

此外,您将密码存储为普通字符串,这是一个坏主意,您应该使用一些可用的路由认证插件,如Devise或Authlogic。