0

我对在参数中添加 [: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:increate' # (eval):2:in click_button' # ./spec/requests/authentication_pages_spec.rb:18:inblock (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>
4

3 回答 3

1

尝试删除对我有用的 [:session] 括号

于 2012-08-01T18:33:35.737 回答
0

它会阻止您的代码,因为我认为 params[:session] 为零,而您试图从 nil 获取 [:email],当然应该导致异常。教程中应该有一些代码定义了 params[:session] 哈希。试着看起来更好。为了使您的代码稳定,您必须确保始终定义 params[:session] 或尝试使用 ternar 函数 params[:session] ?参数[:会话] [:电子邮件]:''

于 2012-08-01T18:43:31.657 回答
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]

于 2012-08-02T17:15:27.703 回答