渲染局部模板从一个控制器的查看到另一个控制器的Rails中查看
-
21-09-2019 - |
题
我有一个被称为“节目”控制器的图。里面那个观点,我想呈现另一个控制器的视图的内容 - 显然,对这种观点的形式逻辑去跟它属于太控制器。我该怎么做呢?我是相当新的轨道,我不自信的框架还没有100%。
您几乎可以考虑在视图中对其“小部件”。我知道你可以使通过使用从上视图的相同的控制器操作:
render :action => "show_home_page", :layout=> false
,但我需要它呈现来自另一个控制器的动作(图)。
即
我有一个观点,这是 呈现到的布局。这种观点, 属于控制器A. 我需要呈现“指数”和“新” 原始视图内部视图从控制器B(上面)
。
解决方案
在你的问题的术语是有点困惑。如果是在一个控制器,并且希望在其他操作方法在另一个控制器执行代码和渲染它的模板,你应该redirect_to的这一行动。比方说,另一个控制器被称为ContractsController
redirect_to :controller => "contracts", :action => "show_home_page"
如果你只是想使用视图模板从另一个方法,从动作的响应,你只需要在渲染参数的前缀控制器的名称。这不会打电话的动作,它将只使用它的模板。
例如,如果模板为生活合同控制器文件夹中。
render :action => "/contracts/show_home_page", :layout=> false
我觉得在这种情况下,你实际上是在谈论一个部分,它看起来像
render :partial => "/contracts/show_home_page"
然而,我看到你在这里抓的是,你真的想调用多个动作的方法来呈现一个页面。这不是它的工作原理。你将不得不设置的模板将在单一行动中引用的对象。这是一个原因,大多数Rails开发者投入了大量的模型代码,因此不重复遍布控制器的设置。
但还有另一种方式... 的,其中的魔术的JavaScript 的用武之地。
在您的网页,创建一个函数是这样的:
<script type="text/javascript" language="javascript">
function load_categories() {
<%= remote_function(:url => {:controller => "categories", :action => "list"},
:update => "categories")%>
};
</script>
如果你调用在onload甚至你的页面,它会与ID为“类别”更换分度,从引用的操作响应。
其他提示
如果你真的想完全呈现另一种操作(即模拟的请求要经过整个Ruby on Rails的堆栈),你可以使用的 Webrat (检查 Webrat这里截屏)。
在传统的MVC Web应用程序,你应该很少有需要做到这一点。但以我的经验开发SOFEA风格和的微架构的webapps 的,这是越来越常见。
我不知道我完全理解您的问题声明(为什么必须从视图中进行),但我要说,你只需要调用来自控制器A redirect_to
到控制器B。