首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby on Rails教程第9章

Ruby on Rails教程第9章
EN

Stack Overflow用户
提问于 2012-08-02 02:24:10
回答 3查看 336关注 0票数 0

我被添加到params中的:session搞糊涂了。它似乎也破坏了我的网站。有人能解释一下这对我有什么作用吗?

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<% 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>
EN

回答 3

Stack Overflow用户

发布于 2012-08-02 02:33:36

尝试删除:session括号,这对我很有效

票数 1
EN

Stack Overflow用户

发布于 2012-08-02 02:43:32

它会阻止你的代码,因为params:session是nil,你试图得到:email from nil,什么当然会导致异常。教程中应该有一些定义params:session hash的代码。要使你的代码看起来更稳定,你必须确保params:session总是被定义,或者尝试使用三元函数params:session ? params:session:'‘

票数 0
EN

Stack Overflow用户

发布于 2012-08-03 01:15:28

您可以在视图中替换以下内容:

代码语言:javascript
运行
复制
<%= 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]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11765248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档