您问题中的术语有点混乱。如果在一个控制器中,并且您想在另一个控制器的另一个操作方法中执行代码并呈现其模板,您应该重定向到该操作。假设另一个控制器称为 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的魔力就在这里。
在您的页面中,创建如下函数:
<script type="text/javascript" language="javascript">
function load_categories() {
<%= remote_function(:url => {:controller => "categories", :action => "list"},
:update => "categories")%>
};
</script>
如果您在页面的 onload 中调用它,它会将 id 为“categories”的 div 替换为来自引用的操作的响应。