将部分从一个控制器的视图渲染到另一个控制器的Rails视图

我有一个名为“show”的控制器的视图。 在该视图中,我想渲染另一个控制器视图的内容 – 显然,该视图上的表单逻辑与它所属的控制器进行通信。 我该怎么做呢? 我对rails非常陌生,我对框架没有100%的信心。

您几乎可以在视图中将它们视为“小部件”。 我知道您可以使用以下方法在视图上从同一个控制器渲染操作:

render :action => "show_home_page", :layout=> false 

但是我需要它来从另一个控制器渲染动作(视图)。

即。

我有一个视图,它被渲染到一个布局上。 该视图属于控制器A.我需要在原始视图中从控制器B渲染“索引”和“新”视图(上图)

你问题中的术语有点混乱。 如果在控制器中并且您想要在另一个控制器中的另一个操作方法中执行代码并呈现其模板,则应该重定向到该操作。 假设另一个控制器叫做ContractsController

 redirect_to :controller => "contracts", :action => "show_home_page" 

如果您只想将来自其他方法的视图模板用作操作的响应,则只需在render参数中为控制器的名称添加前缀。 这不会调用操作,它只会使用其模板。

例如,如果模板位于合同控制器的文件夹中。

 render :action => "/contracts/show_home_page", :layout=> false 

我认为在这种情况下你实际上是在谈论一个局部的,看起来像

 render :partial => "/contracts/show_home_page" 

但是,我在这里看到的是你实际上想要调用多个动作方法来渲染单个页面。 这不是它的工作原理。 您将不得不设置模板将在单个操作中引用的对象。 这是大多数Rails开发人员在模型中放入大量代码的原因之一,因此整个控制器不会重复设置。

但还有另一种方式…… JavaScript的神奇之处在于它。

在您的页面中,创建一个如下函数:

  

如果你在onload甚至你的页面中调用它,它将用引用的动作的响应替换id为“categories”的div。

如果你真的想要完全渲染另一个动作(即模拟一个请求通过整个Ruby on Rails堆栈),你可以使用Webrat (在这里查看Webrat截屏 )。

在传统的MVC Web应用程序中,您应该很少需要这样做。 但根据我开发SOFEA风格和微架构webapps的经验 ,这种情况越来越普遍。

我不确定我完全理解你的问题陈述(为什么必须从视图中完成),但我要说你只需要从控制器A调用redirect_to到控制器B.