ruby-on-rails - Ruby on Rails 中一个共享 View 的两个 Controller

标签 ruby-on-rails ruby model-view-controller

我有两个 Controller 分别用于两个模型,例如照片和类别。 index 和 show 方法在每个 Controller 中都非常相似,并且 View 是相同的。两个模型共享 View 的最佳方法是什么?

我有两个选择:

  • 使用助手。在助手中将放置 View 的代码,并从每个 View (照片/ View 和类别/ View )调用助手

  • 在每个 View 中使用局部 View 。我认为这是一个更干净的解决方案,但在编写此解决方案时,我的脑海中出现了巨大的 DRY。

因此,我有来自两个模型的两个 Controller ,每个 Controller 都位于并公开一个@photo 对象(照片 Controller 包含所有照片,类别 Controller 仅包含所选类别的照片),我需要一个 View 来显示这两个对象。

我正在为此寻找一个优雅的解决方案,提示 REST 和 DRY 原则。有什么想法吗?

提前致谢。

最佳答案

我的一个项目也有类似的情况。大多数 Controller 的所有删除 View 都采用相同的样式,显示相同的确认框,并简单地呈现要删除的任何对象的可预测显示。

在我看来,该解决方案非常简单和优雅。简单地说,我们(开发人员)所做的就是在 app/views 中创建一个名为 shared 的新目录,并将共享 View 放在那里。这些可以是完整的模板文件,也可以只是部分模板文件。

我建议使用共享模板(既不在类别也不在照片 View 目录中,而是在共享目录中)并从 View 中手动渲染它。

例如在 Controller 和文件 app/views/shared/photo.html.erb 中都有这样的方法:

def show
  @photo = Photo.first # ... or whatever here
  render :template => 'shared/photo'
end

这应该会成功呈现共享模板。这是 DRYest 路线,并且不会像在每个 Controller 的 View 目录中使用或多或少的空 View 只是为了包含一个共享部分时那样感到污染,正如我理解你的问题所暗示的那样。

关于ruby-on-rails - Ruby on Rails 中一个共享 View 的两个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/472817/

相关文章:

ruby-on-rails - fields_for 不渲染 - rails 3

java - struts 2 : Action result. 如何在jsp上显示浏览器地址行链接?

mysql - 防止 Rails 缓存 ActiveRecord 查询的结果

ruby-on-rails - 如何使用 rspec 和 Ruby 测试父类(super class)方法抛出异常

ruby-on-rails - rails |如何在生产中查看实时服务器日志?

ruby - 如何在 Ruby 1.8.7 中获取字符的 Unicode?

ruby koans about_nil.rb -- 问题 fr/newbie

ruby - 什么是 Ruby 文件 I/O 中的 EOFError?

Azure Web App 文件下载 - 特殊字符问题

java - 为什么我的 JDialog 中的 JButton 不起作用?固定的