如何将登录方式从“form_tag”转换为“simple_form_for”?

How to convert from `form_tag` to `simple_form_for` way for Sign In?

这段代码工作正常:

<%= 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 时,出现错误 电子邮件或密码无效!

# 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 - 是的,是单数,不是复数

添加 simple_form_for :session 后,表单开始发送包含在 session 键中的所有参数:session: { email: 'email@email.com', password: 'password' }。如果你检查服务器日志你会看到它

控制器的变化:

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