【问题标题】:Render a view of another controller渲染另一个控制器的视图
【发布时间】:2011-12-01 17:57:56
【问题描述】:

我想要做的是有 2 个不同的控制器,client 和 test_client。客户端控制器已经构建,我想创建一个 test_client 控制器,我可以用它来玩弄客户端的 UI 并根据需要进行调整。我主要是试图绕过我在客户端中内置的验证以及它对加载数据的管理控制器的依赖。

所以我希望 test_client 控制器加载示例数据集,然后呈现客户端控制器的索引视图,以便我可以调整客户端 UI。就是这样。

我在 test_clients 索引方法中试过这个:

class TestClient
    def index
        render :template => 'client/index'
    end
end

但我收到一个错误,因为它在当前控制器视图中为它们查找时找不到客户端部分...

所以我已经对此进行了调查,大多数人说你不应该打这样的电话,但我认为这种情况是合理的用法......我只需要弄清楚如何让它工作。

【问题讨论】:

  • 你在用git吗?因为这是 git 分支恕我直言的一个很好的用例。
  • 我实际上正在使用 svn,但这是个好主意。我可能会在下一个项目中尝试。

标签: ruby-on-rails ruby


【解决方案1】:

您需要调整您的视图,以便您需要的部分路径采用'controller/partial' 的形式。在这种情况下可能是'client/partial'。然后你可以像以前一样简单地使用render 'client/index'

所以在你认为的某个地方说你有这个:

<%= render :partial => 'info' %>

你会想把它改成这样:

<%= render :partial => 'client/info' %>

【讨论】:

  • 这个解决方案运行良好,尽管我不喜欢在其中硬编码控制器,除非我重命名控制器,否则它不会对我产生任何影响。
  • 如果这是在多个控制器中使用的部分,我通常将它们放在app/views/shared下,然后你做render :partial =&gt; 'shared/info'或类似的东西。可能想更好地命名它。
【解决方案2】:

将您的客户端控制器视图转换为部分视图,为 test_client 控制器中的所有操作创建空视图,为各个 test_client 视图呈现客户端部分视图。

示例:
客户端视图
index.html.erb 到 _index.html.erb

test_client 视图
index.html.erb
在这个视图中, 'clients/index', :locals =>{ }%>

【讨论】:

    【解决方案3】:

    您可以通过多种方式做到这一点,每个人都不同。您可以做到这一点的一种方法是将您的发现者放入演示者中。然后将索引视图中的一些数据变成部分数据,或者您可以将布局设置为 false 来渲染模板。

    然后在 client_test 视图中,您可以使用与其关联的演示者呈现该索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2010-12-18
      相关资源
      最近更新 更多