我对params的[:session]的加入感到困惑。它似乎也打破了我的网站。有人可以解释一下这对我有什么影响吗?
class SessionsController < ApplicationController
.
.
.
def create
user = User.find_by_email(params[:session][:email])
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_back_or user
else
flash.now[:error] = 'Invalid email/password combination'
render 'new'
end
end
.
.
.
end
错误讯息:
1)身份验证登录信息无效
失败/错误:{click_button“登录前}}
NoMethodError:
未定义的方法[]' for nil:NilClass
# ./app/controllers/sessions_controller.rb:7:in
创建'
#(eval):2:在'{/ p>中的click_button'
# ./spec/requests/authentication_pages_spec.rb:18:in
块(4级)中
我认为问题与从form_for切换到form_tag有关。我在交换机中丢失了对会话的引用,因为我无法弄清楚如何正确地包含它。如果有人对此问题有任何建议,将非常感谢。我想知道是否有一个实际的理由想让它成为params [:session] [:email]而不是仅仅是为了组织?
new.html.erb
<% provide(:title, "Sign in") %>
<h1>Sign in</h1>
<div class="row">
<div class="span6 offset3">
<%= form_tag sessions_path do %>
<%= label_tag :email %>
<%= text_field_tag :email %>
<%= label_tag :password %>
<%= password_field_tag :password %>
<%= submit_tag "Sign in", class: "btn btn-large btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>
答案 0 :(得分:1)
尝试删除适用于我的[:session]括号
答案 1 :(得分:0)
它制动你的代码'因为params [:session]是nil我认为你想从nil得到[:email],那么应该导致异常。教程中应该有一些代码定义了params [:session] hash。试着看起来更好。 为了使您的代码稳定,您必须确保始终定义params [:session]或尝试使用ternar function params [:session]? params [:session] [:email]:''
答案 2 :(得分:0)
您可以在视图中替换它:
<%= form_for :session, :url => sessions_path do %>
<%= label_tag :email %>
<%= text_field_tag :email %>
<%= label_tag :password %>
<%= password_field_tag :password %>
<%= submit_tag "Sign in", class: "btn btn-large btn-primary" %>
<% end %>
form_tag只生成一个HTML表单标签,form_for用于描述某些内容。使用form_for创建的表单字段的所有输入都将具有如下名称:user_session[email]
。因此,当您提交表单时,在控制器中,您将拥有:params[:user_session][:email]
。