在加载/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被定义为模块。
有什么问题吗?
7条答案
按热度按时间0md85ypi1#
我也遇到过类似的问题:
结果我在我的助手中定义了这个:
取代:
在这个例子中,我在'AgileTeamsHelper'中缺少了's'。我相信Rails会寻找一个与helper相同的模块,但是使用了驼峰大小写。IE.
'agile_teams_helper'.camelize
-〉"AgileTeamsHelper"
cqoc49vn2#
我只是遵循了古老的建议:
如果有疑问,请重新启动服务器
这对我来说已经足够了。我确信代码是正确的。
3z6pesqy3#
TL; DR
有时候不是帮手的问题,删除所有帮手,看看接下来会发生什么。
身体
似乎如果控制器本身的加载(读取类文件,评估内容以定义内部定义的类/模块)由于任何原因失败,它都会显示此错误。
在我的例子中,有一个gem中的类,用于
include
对控制器的调用,它覆盖了included
方法,并执行了一些初始化过程。问题是,这个include
方法引发了一个异常,阻止了控制器的加载,我不知道为什么,但导致了这个问题中描述的情况。我通过删除所有的助手并检查接下来发生的事情找到了根本原因。如果错误发生了变化,并且你发现它发生在加载控制器的时候,那么现在你可以修复它。
pkwftd7m4#
我通过重新创建helpers/sessions_helper.rb(使用touch)并用完全相同的内容填充它来解决这个问题。
jfewjypa5#
正如其他人所指出的,这可能不是助手的问题,助手的错误可能掩盖了真实的的问题。至少这是我将Rails 4应用程序升级到Rails 5的经验。
@TKChattoraj建议here,而不是删除Rails 5+中的所有助手,您可以将
config.action_controller.include_all_helpers = false
添加到config/environments/development.rb中,这将消除来自助手的任何误报。mum43rcc6#
我的问题是在包括不存在的助手(打字错误)
rn0zuynd7#
我自己在创建一个新的helper之后就遇到了这个问题,我得到的错误是Rails无法找到不同的helper。
这最终是由于我在新的帮助文件(
recaptcha_helper.rb
)中定义的模块命名不正确(原来是ReCaptchaHelper
,需要是RecaptchaHelper
)。检查添加到帮助器的任何新代码是否有语法错误,如果添加了新的帮助器,请确保模块名称的格式与文件名一致(例如:
the_new_helper.rb
应该有一个名为TheNewHelper
的模块)