我试图在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
正确传递了参数,但它正在尝试搜索“用户”#39; users表中的属性。没有用户attr。 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 | |
+------------+--------------+------+-----+---------+----------------+
答案 0 :(得分:0)
在您的情况下,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])
答案 1 :(得分:-1)
这一行有一个问题
user = User.where(params[:session][:email]).first
您希望通过他的电子邮件地址搜索用户,因此您必须指定(告诉我要搜索该特定字段的活动记录),如此
user = User.where(email: params[:session][:email]).first