我正在阅读 Rails 教程,在练习 8.1.5 之后,当我单击登录按钮时没有输入电子邮件或密码时,我的登录页面抛出异常: http ://ruby.railstutorial.org/chapters/sign-in-注销#sec-rendering_with_a_flash_message
错误:
NoMethodError in SessionsController#create
undefined method `[]' for nil:NilClass
app/controllers/sessions_controller.rb:7:in `create'
SessionsController 与 Create 方法的最终代码完全匹配
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:session][:email].downcase) #line 7
if user && User.authenticate(params[:session][:password])
#will fill this in later
else
flash.now[:error] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
end
end
我确实将按钮标签更改为登录而不是“登录”,因为这与“注册”太混淆了,但我认为这不会造成问题。会话\new.html.erb
<% provide(:title, "Log in") %>
<h1>Log in</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for(:sesssion, url: sessions_path) do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Log in", class: "btn btn-large btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>
这篇文章暗示我需要在我的用户模型中使用一个方法,但添加它并没有帮助: NoMethodError in SessionsController#create
我尝试将其添加到 user.rb,但它没有帮助 find_by_email 在函数中执行的结果与控制台不同:
def self.authenticate(email, submitted_password)
user = find_by_email(email)
return user.nil? ? nil : user
end
任何想法将不胜感激!