ruby-on-rails 获取:“找不到SessionsHelper,应在helpers/sessions_helper.rb中定义它”

d4so4syb  于 2023-01-06  发布在  Ruby
关注(0)|答案(7)|浏览(103)

在加载/login/时,我在日志文件中看到以下内容。
第一个月
ActionController::RoutingError (Couldn't find SessionsHelper, expected it to be defined in helpers/sessions_helper.rb): app/controllers/application_controller.rb:1:in 'app/controllers/sessions_controller.rb:1:in'
但是,sessions_helper. rb确实存在于helpers文件夹中。此外,application_controller. rb和sessions_controller. rb被定义为类,而session_helper. rb被定义为模块。
有什么问题吗?

0md85ypi

0md85ypi1#

我也遇到过类似的问题:

Couldn't find AgileTeamsHelper, expected it to be defined in helpers/agile_teams_helper.rb

结果我在我的助手中定义了这个:

module AgileTeamHelper
  def td_color(text)
    if text == "Green"
      "green-background"
    elsif text == "Yellow"
      "yellow-background"
    elsif text == "Red"
      "red-background"
    end
  end
end

取代:

module AgileTeamsHelper # <-- (Notice the extra s after teams)
  def td_color(text)
    if text == "Green"
      "green-background"
    elsif text == "Yellow"
      "yellow-background"
    elsif text == "Red"
      "red-background"
    end
  end
end

在这个例子中,我在'AgileTeamsHelper'中缺少了's'。我相信Rails会寻找一个与helper相同的模块,但是使用了驼峰大小写。IE. 'agile_teams_helper'.camelize-〉"AgileTeamsHelper"

cqoc49vn

cqoc49vn2#

我只是遵循了古老的建议:
如果有疑问,请重新启动服务器
这对我来说已经足够了。我确信代码是正确的。

3z6pesqy

3z6pesqy3#

TL; DR

有时候不是帮手的问题,删除所有帮手,看看接下来会发生什么。

身体

似乎如果控制器本身的加载(读取类文件,评估内容以定义内部定义的类/模块)由于任何原因失败,它都会显示此错误。
在我的例子中,有一个gem中的类,用于include对控制器的调用,它覆盖了included方法,并执行了一些初始化过程。问题是,这个include方法引发了一个异常,阻止了控制器的加载,我不知道为什么,但导致了这个问题中描述的情况。
我通过删除所有的助手并检查接下来发生的事情找到了根本原因。如果错误发生了变化,并且你发现它发生在加载控制器的时候,那么现在你可以修复它。

# Example class of what have caused the Helper not found in my case
class FooController
  include SomeGemWhichRaiseExceptionOnInclude
end
pkwftd7m

pkwftd7m4#

我通过重新创建helpers/sessions_helper.rb(使用touch)并用完全相同的内容填充它来解决这个问题。

jfewjypa

jfewjypa5#

正如其他人所指出的,这可能不是助手的问题,助手的错误可能掩盖了真实的的问题。至少这是我将Rails 4应用程序升级到Rails 5的经验。
@TKChattoraj建议here,而不是删除Rails 5+中的所有助手,您可以将config.action_controller.include_all_helpers = false添加到config/environments/development.rb中,这将消除来自助手的任何误报。

mum43rcc

mum43rcc6#

我的问题是在包括不存在的助手(打字错误)

rn0zuynd

rn0zuynd7#

我自己在创建一个新的helper之后就遇到了这个问题,我得到的错误是Rails无法找到不同的helper。
这最终是由于我在新的帮助文件(recaptcha_helper.rb)中定义的模块命名不正确(原来是ReCaptchaHelper,需要是RecaptchaHelper)。
检查添加到帮助器的任何新代码是否有语法错误,如果添加了新的帮助器,请确保模块名称的格式与文件名一致(例如:the_new_helper.rb应该有一个名为TheNewHelper的模块)

相关问题