我被添加到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:increate‘# (eval):2:in click_button' # ./spec/requests/authentication_pages_spec.rb:18:inblock (4 Level) in’
编辑8/2
我相信这个问题与从form_for切换到form_tag有关。我丢失了对交换机中会话的引用,因为我不知道如何正确地包含它。如果有人对这个问题有任何建议,我们将不胜感激。我想知道是否有一个实际的理由希望它成为params:session,或者它只是为了组织?
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>发布于 2012-08-02 02:33:36
尝试删除:session括号,这对我很有效
发布于 2012-08-02 02:43:32
它会阻止你的代码,因为params:session是nil,你试图得到:email from nil,什么当然会导致异常。教程中应该有一些定义params:session hash的代码。要使你的代码看起来更稳定,你必须确保params:session总是被定义,或者尝试使用三元函数params:session ? params:session:'‘
发布于 2012-08-03 01:15:28
您可以在视图中替换以下内容:
<%= 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标签,而form_for则用来描述一些东西。使用form_for创建的表单字段的所有输入都将具有如下名称:user_session[email]。因此,当您提交表单时,在您的控制器中,您将拥有以下内容:params[:user_session][:email]。
https://stackoverflow.com/questions/11765248
复制相似问题