Я просматриваю учебник по рельсам, и моя страница входа выдает исключение после упражнения 8.1.5, когда я нажимаю кнопку входа без ввода адреса электронной почты или пароля: http://ruby.railstutorial.org/chapters/sign-in-sign-out#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, но это не помогло from-console">результаты выполнения find_by_email в функции отличаются от консольных:
def self.authenticate(email, submitted_password)
user = find_by_email(email)
return user.nil? ? nil : user
end
Благодарим за любую идею!