Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 未定义的方法“[]';对于nil:NilClass railstutorial.org 8.20>;_Ruby On Rails 4_Railstutorial.org - Fatal编程技术网

Ruby on rails 4 未定义的方法“[]';对于nil:NilClass railstutorial.org 8.20>;

Ruby on rails 4 未定义的方法“[]';对于nil:NilClass railstutorial.org 8.20>;,ruby-on-rails-4,railstutorial.org,Ruby On Rails 4,Railstutorial.org,我正在学习Michael Hartl的rails教程,真的很有趣! 但从清单8.20开始,我就遇到了麻烦。 因为我猜我做了一个o型,我删除了应用程序,重新开始。。 最好的学习方法是重复,对吗 嗯。。在第二次构建时,我也遇到了同样的错误 > NoMethodError in SessionsController#create undefined method `[]' for nil:NilClass Extracted source (around line #7): 6 d

我正在学习Michael Hartl的rails教程,真的很有趣! 但从清单8.20开始,我就遇到了麻烦。 因为我猜我做了一个o型,我删除了应用程序,重新开始。。 最好的学习方法是重复,对吗

嗯。。在第二次构建时,我也遇到了同样的错误

>    NoMethodError in SessionsController#create
undefined method `[]' for nil:NilClass

Extracted source (around line #7):


6  def create
7    user = User.find_by(email: params[:session][:email].downcase)
8    if user && user.authenticate(params[:session][:password])
9      sign_in user
10    else
在谷歌搜索了几个小时后,我尝试重置数据库(drop/create/migrate测试:prepare)

我尝试过从示例中复制代码片段(例如控制器/助手/视图) 但我似乎找不到解决办法

这是你的密码

会话\u控制器:

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      sign_in user
    else
      flash.now[:error] = 'Invalid email/password combination'
      render 'new'
    end
  end

  def destroy
  end
end
用户模型

class User < ActiveRecord::Base
    before_save {self.email = email.downcase }
    before_create :create_remember_token

    validates :name, presence: true, length: { maximum: 50 }
    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    validates :email, presence: true, format: { with: VALID_EMAIL_REGEX}, 
            uniqueness: {case_sensetive: false}
    has_secure_password
    validates :password, length: { minimum: 3 }

    def User.new_remember_token
        SecureRandom.urlsafe_base64
           # SecureRandom.urlsafe_base64

    end

    def User.encrypt(token)
        Digest::SHA1.hexdigest(token.to_s)
    end


        private
        def create_remember_token
            self.remember_token = User.encrypt(User.new_remember_token)
        end
end

如何正确复制粘贴错误日志?

根据您收到的错误,问题显然存在于您的用户控制器中:

def create
  user = User.find_by(email: params[:session][:email].downcase)
  if user && user.authenticate(params[:session][:password])
    sign_in user
  else
    flash.now[:error] = 'Invalid email/password combination'
    render 'new'
  end
end
之所以生成此错误,是因为
params[:session]
实际上是
nil
。现在的问题是,为什么

我的猜测是,你的签名在形式上有一个拼写错误,应该是:

<%= form_for(:session, url: sessions_path) do |f| %>

  <%= f.label :email %>
  <%= f.text_field :email %>

  <%= f.label :password %>
  <%= f.password_field :password %>

  <%= f.submit "Sign in", class: "btn btn-large btn-primary" %>
<% end %>


请确保键入的会话正确。

我们可以查看更多错误信息,比如日志本身吗?这应该会告诉我们生成它的文件/行。我不认为这是问题所在,但您在
flash中有一个输入错误。现在[:success]
(您缺少一个s)我添加了错误:提取的源代码(在第7行附近):5 6 7 8 9 10 def create user=user.find_by(email:params[:session][:email]。downcase)如果用户&&user.authenticate(params[:session][:password])登录用户Elsey您赢得了(虚拟的)wassing机器!非常感谢:D在将会话更改为会话并重新启动服务器后,它工作了谢谢,我会。。你怎么这么快就猜到了?这是一个常见的错误吗?实际上是演绎。如果
params[:session]
nil
,而它本不应该是,那么在创建
params[:session]
的表单中有一个打字错误是合乎逻辑的。再次感谢您!学习发现和理解错误同样重要
module UsersHelper

  # Returns the Gravatar (http://gravatar.com/) for the given user.
  def gravatar_for(user, options = { size: 50 })
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    size = options[:size]
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end
def create
  user = User.find_by(email: params[:session][:email].downcase)
  if user && user.authenticate(params[:session][:password])
    sign_in user
  else
    flash.now[:error] = 'Invalid email/password combination'
    render 'new'
  end
end
<%= form_for(:session, url: sessions_path) do |f| %>

  <%= f.label :email %>
  <%= f.text_field :email %>

  <%= f.label :password %>
  <%= f.password_field :password %>

  <%= f.submit "Sign in", class: "btn btn-large btn-primary" %>
<% end %>