Как конфертировать из `form_tag` в` simple_form_for` для входа? - PullRequest
0 голосов
/ 21 февраля 2019

Этот фрагмент отлично работает:

<%= form_tag(session_path) do |f| %>
   <p>
       <%= label_tag :email %>
       <%= email_field_tag :email, nil %>
    </p>
    <p>
       <%= label_tag :password %>
       <%= password_field_tag :password, nil %>
    </p>
        <%= submit_tag "Sign in", class: 'btn-primary' %>
<% end %>

Но когда я попытался изменить его на simple_form_for, как показано на скриншоте, он выдает ошибку Неверный адрес электронной почты или пароль! enter image description here

# sessions_controller.rb
class SessionsController < ApplicationController
    def new
    end

    def create
        if user = User.authenticate(params[:email],params[:password])
            session[:user_id] = user.id
            flash[:notice] = "Signed in successfully."
            redirect_to user
        else
            flash.now[:alert] = 'Invalid email or password!'
            render :new
        end
    end
end

Я чувствую, что что-то не так в линии

<%= simple_form_for :session, url: session_path do |f| %>

В routes.rb: resource :session -Да, это единственное число, а не множественное число

1 Ответ

0 голосов
/ 21 февраля 2019

Когда вы добавили simple_form_for :session, форма начала отправлять все параметры, заключенные в ключ session: session: { email: 'email@email.com', password: 'password' }.Вы увидите это, если проверите журнал сервера

Изменение в контроллере:

User.authenticate(params[:session][:email], params[:session][:password])
...