【问题标题】:How to render content from subfolder in a view?如何在视图中呈现子文件夹中的内容?
【发布时间】:2014-09-14 03:10:36
【问题描述】:

我正在使用来自 Suspenders 的 rails 4,并且需要在视图的子文件夹中包含来自中间人博客机架应用程序的内容。在我的应用程序中,我的博客内容位于:

rails root > my_blog > source > index.html.erb.

我已将视图创建为:

rails root > app > views > welcomes > index.html.haml

我认为的代码是:

%h1 Welcome

= render "my_blog/source/index.html.erb"

但是当我访问该页面时,我收到了缺少部分错误,并且消息说它只在视图文件夹中查看。

如何从视图之外的文件夹中呈现内容?

【问题讨论】:

  • 我不认为那是重复的。这个问题是关于已经在 views 文件夹下的文件。
  • 您不能根据您的要求使用已接受的答案来 append_to 或 prepend_to 视图路径吗?

标签: ruby-on-rails middleman


【解决方案1】:

部分

问题是 Rails 正在尝试调用 partial,这不是您要调用的。部分的名称应该以_underscore 开头,向 Rails 表明它是部分的,因此您收到错误的原因

这很重要的原因是因为虽然你只是调用render,但实际上你也会调用部分

--

约定

您遇到的一个问题是,您会以多种方式违反约定:

  • MVC 指示将在每个请求中加载“视图”(因此 Rails 会期望它在您使用时出现)

  • 系统的“部分”功能需要添加到您向用户显示的视图中。这意味着你必须确定你 有一个视图已经显示在屏幕上

这意味着您需要确定您是否打算在应用的这一部分中使用partial 或其他元素。从外观上看,虽然您可能在做正确的事情,但您需要确保您能够正确加载部分:

<%= render "your/partial/path/_partial_name.html.erb %>

--

查看路径

关于您的view 路径问题,虽然我从未直接遇到过这个问题,但有一个名为append_view_path 的函数,它允许您为您的应用添加另一个“路径”:

#app/controllers/welcome_controller.rb
Class WelcomeController < ApplicationController
    append_view_path(File.join(RAILS_ROOT, "app/themes/#{@current_theme}"))
end

【讨论】:

    【解决方案2】:

    试试这是在你的视图文件中:

    %h1 欢迎

    = render :partial => "my_blog/source/index"
    

    注意:上述指定路径中必须有_index.html.erb部分文件。

    另外,尝试将名称从 _index.html.erb 更改为 _someothername.html.erb,因为 index.html.erb 通常是用于索引操作的视图文件。您可以避免不必要的混淆。

    这可能对你有帮助..!

    谢谢!!

    添加的行(已编辑):

    请更改您的文件名

    rails root > my_blog > source > index.html.erb.
    

    rails root > my_blog > source > _index.html.erb.
    

    【讨论】:

    • 感谢您的建议。我得到了同样的错误。
    • 编辑了答案。试试看。如果有帮助,请告诉我。
    • 感谢您的建议。我将 _index.html.erb 更改为 _blog.html.erb。然后在我看来更改了这一行:= 渲染部分:“#{Rails.root}/msd_blog/source/blog”。我得到了同样的错误。我想知道这是否是引用中间人的问题?
    【解决方案3】:

    你试过完整路径吗?

    = render "#{Rails.root}/my_blog/source/index.html.haml"
    

    【讨论】:

    • 我仍然得到同样的错误:缺少部分 /Users/Documents/site/my_blog/source/_index.html.erb 搜索:*“/Users/Documents/site/app/views”
    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多