Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 RubyonRails-停留在Hartl书的第9.3.3章,未定义的方法登录_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails RubyonRails-停留在Hartl书的第9.3.3章,未定义的方法登录

Ruby on rails RubyonRails-停留在Hartl书的第9.3.3章,未定义的方法登录,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在阅读Hartl书中的9.3.3,并一直被一个 SessionController:0x00000100c0da90的未定义方法“登录” 我知道这是因为sign_-in方法位于sessions_-helper文件中,该文件由模型而不是控制器拾取。Hartl手册不需要“include sessionhelp”行 如果我加入了那个黑客程序(我认为我不应该这么做),那么它最终会用另一个未定义错误的方法(current_user)让我登陆 这是密码 sessioncontroller.rb clas

我正在阅读Hartl书中的9.3.3,并一直被一个

SessionController:0x00000100c0da90的未定义方法“登录”

我知道这是因为sign_-in方法位于sessions_-helper文件中,该文件由模型而不是控制器拾取。Hartl手册不需要“include sessionhelp”行

如果我加入了那个黑客程序(我认为我不应该这么做),那么它最终会用另一个未定义错误的方法(current_user)让我登陆

这是密码

sessioncontroller.rb

class SessionsController < ApplicationController

  def new
    @title = "Sign in"
  end

  def create
    user = User.authenticate( params[:session][:email],
                              params[:session][:password])
     if user.nil?
       flash.now[:error] = "Invalid email/password combo."
       @title = "Sign in"
       render 'new'
     else
       sign_in user
       redirect_to user
     end 

 end

  def destroy
  end 

您不需要在应用程序控制器中
包含SessionHelper
?(在书中列出9.11),然后在其中定义
current\u user
(清单9.14)

应用程序控制器中应该有一个“include SessionHelper”。默认情况下,辅助对象包含在视图中,但为了使用控制器中的辅助对象,需要显式包含它

如果您已经将SessionHelper包含在应用程序\u控制器中,并且仍然出现此失败测试错误:

如果您在第8章之前的练习中更新了spec/support/utilities.rb文件,并使用了给定的示例,则很有可能您创建了“sign_-in”方法,但根据第8章练习中的示例将其命名为“valid_-sign”,而不是清单9.6中的“sign_-in”。希望这有帮助


这也是基于本教程第2版,但我认为仍然适用于第1版。

还值得补充的是,您需要小心不要被SessionHelper模块中编写的sign_-in帮助程序和spec/support/utilities.rb文件中编写的sign_-in帮助程序弄糊涂。名称相同,但功能不同。在测试中,调用的是utilities.rb文件(清单9.6)中编写的,如下所示:

def sign_in(user)
  visit signin_path
  fill_in "Email",      with: user.email
  fill_in "Password",   with: user.password
  click_button "Sign in"
  #sign in when not using capybara as well
  cookies[:remember_token] = user.remember_token
end

我犯的错误是,我从未将utilities.rb文件放入子文件夹支持

谢谢!是的,我不知道我怎么会错过那个盒子。谢谢
def sign_in(user)
  visit signin_path
  fill_in "Email",      with: user.email
  fill_in "Password",   with: user.password
  click_button "Sign in"
  #sign in when not using capybara as well
  cookies[:remember_token] = user.remember_token
end