【问题标题】:Ruby on Rails - Stuck on Chapter 9.3.3 of Hartl Book, undefined method sign_inRuby on Rails - 卡在 Hartl Book 的第 9.3.3 章,未定义的方法 sign_in
【发布时间】:2013-05-26 04:10:04
【问题描述】:

我正在阅读 Hartl 书的 9.3.3,但一直卡在一个

SessionsController:0x00000100c0da90 的未定义方法“sign_in”

我知道这是因为 sign_in 方法在 session_helper 文件中,它是由模型而不是由控制器拾取的。 Hartl 书不需要“包含 SessionsHelper”行。

如果我加入了我认为不应该这样做的 hack,那么它最终会以另一个错误 undefined method current_user 登陆我

这里是代码

SessionsController.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 

对于 session_helper.rb

  module SessionsHelper

  def sign_in(user)
    cookies.permanent.signed[:remember_token] = [user.id, user.salt]
    self.current_user = user
  end

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

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

    【讨论】:

    • 谢谢!是的,我不知道我是怎么错过那个盒子的。谢谢!
    【解决方案2】:

    如果您已经在 application_controller 中包含 SessionsHelper 并且仍然收到此失败的测试错误:

    如果您在前面章节的练习中更新了您的 spec/support/utilities.rb 文件。 8 并使用给出的示例,很有可能您创建了“sign_in”方法,但根据第 8 章练习中的示例将其命名为“valid_signin”,而不是在清单 9.6 中简单地命名为“sign_in”。希望这可以帮助。

    这也是基于第二版。本教程的内容,但仍应适用于我想象的第一个。

    【讨论】:

      【解决方案3】:

      另外值得补充的是,您需要小心不要被 SessionsHelper 模块中编写的 sign_in 助手和 spec/support/utilities.rb 文件中编写的 sign_in 混淆。名称相同,但功能不同。在测试中,被调用的是在 utility.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
      

      【讨论】:

        【解决方案4】:

        你不是必须在你的ApplicationController中include SessionsHelper吗? (书上写9.11),然后在里面定义current_user(清单9.14)?

        【讨论】:

          【解决方案5】:

          我犯的错误是我从未将实用程序.rb 文件放在子文件夹 support 中

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-06-11
            • 2012-11-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多