如何渲染与当前视图不同的目录(在我的情况下是父目录)中的部分?
<%=render_partial :sidebar%> #looks in the current dir and works as expected
<%=render_partial "/view/sidebar"%> #doesn't work!
谢谢!
答案 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!