在Ramaze的父目录中渲染部分

时间:2012-12-07 01:48:16

标签: ruby ramaze

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

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

谢谢!

3 个答案:

答案 0 :(得分: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构建类似于widget的Web: - )

答案 1 :(得分:-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

答案 2 :(得分:-1)

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

<%= render "/sidebar" %>

而不是

  

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