【问题标题】:render doesn't know where to look for partials (from helper code)渲染不知道在哪里寻找部分(来自帮助代码)
【发布时间】:2017-04-29 06:55:20
【问题描述】:

当我尝试从帮助程序渲染部分内容时,它会失败并显示以下(精简)错误消息:

Missing partial /_cube_icon with [...]. Searched in:

注意搜索到的目录列表是空的!

相比之下,当在视图中使用渲染时,它知道在哪里看:

Searched in:  * "/Users/Lars/GitHub/algdb/app/views"

在帮助代码中,我使用ActionController::Base.helpers.render()。我应该使用其他渲染功能吗?我如何告诉它在哪里寻找部分?我会以某种方式错误地设置项目吗?

这是 Rails 4.2.4 · Ruby 2.3.1

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 helpers partials


    【解决方案1】:

    部分文件通常位于app/views 目录中,而不是位于Rails 中的helpers 目录中,正如您从收到的错误消息中看到的那样。为了解决您的问题,我会将_cube_icon 文件移动到app/views 目录并在那里组织您的代码。我建议阅读 Rails 文档的这一部分以获取视图 Layouts and Rendering

    另外,听起来您可能是 Rails 的新手,所以我想看看 Rails 提供的约定。您可能知道也可能不知道,Rails 是一个固执己见的框架,这意味着某些事情需要在某些位置进行才能正常工作。这是 Rail 的 MVC 框架 Action View Overview 的视图部分的另一个资源。希望这会有所帮助。

    ---更新-----

    如果您真的想从帮助文件中渲染部分内容,有几种方法可以做到这一点,但最好的方法如下所述:

    app/helpers

     module MyHelper
       def custom_render
         concat(render(:partial => 'cube_icon'))
       end
     end
    

    这里有一些来自 stackoverflow 的链接可以帮助你。

    Rendering a partial from helper #1

    Rendering from a partial from herlper #2

    Using concat rails

    【讨论】:

    • 感谢您的回复!部分 isapp/views 中,并且从视图中渲染得很好。我的问题是尝试从 Helper 代码呈现相同的部分时。
    • 好的,我问你这个。你想用代码完成什么?您尝试从 app/helpers 目录呈现部分内容是不正确的。助手目录的目的不是渲染部分。该责任属于app/views 目录。帮助器用于提取视图逻辑(例如 if/else .each 循环)以使视图更清晰。也许如果你能详细说明我可以帮助你。我真的认为您可能处理不正确。
    • 只是为了补充我的评论,这里直接引用教程点:"The helpers subdirectory holds any helper classes used to assist the model, view, and controller classes. This helps to keep the model, view, and controller code small, focused, and uncluttered."
    • 我想你可能误解了这个问题。部分在app/views/positions/_cube_icon.html.haml,应该是。帮助程序中的代码是:ActionController::Base.helpers.render partial: 'cube_icon' 我以前从未渲染过帮助程序的部分内容,但谷歌搜索显示了许多成功完成此操作的示例。
    【解决方案2】:

    好的,我想通了:

    我是从 helper 目录中的代码调用 render,但不是是从标准 SomethingHelper 模块中的函数调用的。

    当遵循该约定时,事情开始起作用了。

    【讨论】:

    • 我很高兴你知道了。我更新了我的答案,但如果你得到它对你有好处。
    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多