首页 > 解决方案 > 如何将“form_tag”转换为“simple_form_for”登录方式?

问题描述

这个片段工作正常:

<%= 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按照屏幕截图重构它时,它给了我错误Invalid email or password! 在此处输入图像描述

# 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.rbresource :session- 是的,它是单数,不是复数

标签: ruby-on-railsformsruby-on-rails-5simple-form

解决方案


当您添加simple_form_for :session表单时,开始发送包装在session密钥中的所有参数:session: { email: 'email@email.com', password: 'password' }. 如果您检查服务器日志,您会看到它

控制器的变化:

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

推荐阅读