Я просматриваю учебное пособие по рельсам, и моя страница входа бросает исключение после упражнения 8.1.5, когда я нажимаю кнопку входа в систему без ввода адреса электронной почты или pw: http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec-rendering_with_a_flash_messageRails Tutorial 3.2 Ошибка главы 8: NoMethodError в SessionsController # create
Ошибка:
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. –
Нет - Я пытался добавить это, но это не помогло: def self.authenticate (email, submitted_password) \t user = find_by_email (email) \t \t return user.nil? ? nil: user \t end –