我有两个 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/