3

如何渲染与当前视图不同的目录(在我的情况下是父目录)中的部分?

<%=render_partial :sidebar%> #looks in the current dir and works as expected
<%=render_partial "/view/sidebar"%> #doesn't work!

谢谢!

4

3 回答 3

1

您必须指定负责正确视图的正确控制器:

TheRightController.render_partial :侧边栏

如果您不指定控制器类,render_* 仅适用于当前操作(控制器),除了执行真正内部 HTTP 请求的 render_full。

所以,答案是:如果你需要共享模板,只需创建一个特殊的控制器,即Shared,里面没有任何动作方法,只是在适当的视图文件夹中有很多模板并调用Shared.render_partial。

Shared.render_partial 像内部请求一样工作。它呈现控制器动作的内容,甚至执行动作的方法。如果您只想渲染视图(不执行 Shared 的操作方法),请改用 Shared.render_view。

此外,您可以使用内部请求在共享控制器的方法中准备一些数据。例如,如果您的侧边栏由@articles 组成,让我们在Shared 的sidebar() 方法中加载它们。您不需要在显示侧边栏的任何其他控制器中加载@articles!您只在其中调用“Shared.render_partial :sidebar”。这是如何使用 Ramaze 构建类似小部件的 Web :-)

于 2013-04-20T12:24:10.373 回答
-1

@rebnoob 可以使用(没有view目录名,因为 Rails 搜索 app/view 目录)

<%= render "/sidebar" %>

代替

<%=render_partial "/view/sidebar"%> #doesn't work!

于 2013-10-30T01:27:00.437 回答
-1

我在 apidock.com 中找到了以下 api,可能对你有用

 # Renders a collection of partials located in a view subfolder
 # outside of our current controller.  In this example we will be
 # rendering app/views/shared/_note.r(html|xml)  Inside the partial
 # each element of @new_notes is available as the local var "note".
 render :partial => "shared/note", :collection => @new_notes
于 2012-12-07T02:03:41.450 回答