如何渲染与当前视图不同的目录(在我的情况下是父目录)中的部分?
<%=render_partial :sidebar%> #looks in the current dir and works as expected
<%=render_partial "/view/sidebar"%> #doesn't work!
谢谢!
您必须指定负责正确视图的正确控制器:
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 :-)
@rebnoob 可以使用(没有view
目录名,因为 Rails 搜索 app/view 目录)
<%= render "/sidebar" %>
代替
<%=render_partial "/view/sidebar"%> #doesn't work!
我在 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