簡體   English   中英

Rails:SELECT 語句中的未知列

[英]Rails: Unknown column in SELECT statement

我正在嘗試驗證用戶登錄 Rails 應用程序。 控制器代碼如下所示:

def create
  user = User.where(params[:session][:email]).first
  # user = User.where(:type=> 'User', :email => params[:session][:email])
  debugger
  if user and user.authenticate(params[:session][:password])
    session[:user_id] = user.id
    redirect_to admin_url
  else
    redirect_to login_url, alert: "Invalid user/password combination"
  end
end

參數被正確傳遞,但它試圖在用戶表中搜索“用戶”屬性。 沒有用戶屬性。 users表如下所示:

mysql> DESCRIBE users;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| userid     | int(11)      | YES  |     | NULL    |                |
| email      | varchar(255) | YES  |     | NULL    |                |
| password   | varchar(255) | YES  |     | NULL    |                |
| fname      | varchar(255) | YES  |     | NULL    |                |
| lname      | varchar(255) | YES  |     | NULL    |                |
| created_at | datetime     | NO   |     | NULL    |                |
| updated_at | datetime     | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

在您的情況下,ActiveRecord 生成一個查詢,其中params[:session][:email]是列名:

SELECT `users`.* FROM `users` WHERE (`<the value of params[:session][:email]>`)

您應該在where提供列名:

user = User.where(email: params[:session][:email]).first

或者只是使用find_by而不是where + first

user = User.find_by(email: params[:session][:email])

好吧,這條線有問題

user = User.where(params[:session][:email]).first

您想通過他的電子郵件地址搜索用戶,因此您必須像這樣指定(告訴活動記錄我要搜索該特定字段)

user = User.where(email: params[:session][:email]).first

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM