我对在参数中添加 [: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 "Sign in" } NoMethodError: undefined method []' for nil:NilClass
# ./app/controllers/sessions_controller.rb:7:in
create' # (eval):2:in click_button'
# ./spec/requests/authentication_pages_spec.rb:18:in
block (4 levels) in '之前
编辑 8/2
我相信这个问题与从 form_for 到 form_tag 的切换有关。我丢失了对交换机中会话的引用,因为我不知道如何正确包含它。如果有人对此问题有任何建议,将不胜感激。我想知道是否有实际原因希望它是 params[:session][:email] 还是只是为了组织?
新的.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>