我通过轨道教程会和我的登录页面锻炼8.1.5后抛出一个异常,当我点击没有电子邮件或PW输入的登录按钮: http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec-rendering_with_a_flash_messageRails的教程3.2第8章错误:NoMethodError在SessionsController#创建
错误:
NoMethodError in SessionsController#create
undefined method `[]' for nil:NilClass
app/controllers/sessions_controller.rb:7:in `create'
SessionsController最终的代码完全的创建方法匹配
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,但它并没有帮助 results from find_by_email executed in function differs from console:
def self.authenticate(email, submitted_password)
user = find_by_email(email)
return user.nil? ? nil : user
end
任何想法,将不胜感激!
嗨,你有User.authenticate(params [:session] [:password])方法吗?在你的User.rb文件中。 – 2013-03-11 05:55:09
不 - 我尝试添加这一点,但它并没有帮助:DEF self.authenticate(电子邮件,submitted_password) \t用户= find_by_email(电子邮件) \t \t回报user.nil? ?无:用户 \t结束 – 2013-03-11 05:59:04