如何将登录方式从“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])
这段代码工作正常:
<%= 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])