我正在编写一个应用程序 - 与许多应用程序类似 - 有90%的常规CRUD内容和10%的“果汁”,我们需要讨厌的业务逻辑和更多的灵活性和自定义。
关于这90%,我尽可能地坚持DRY原则。只要控制器运行,我发现resource_controller真的有用,我可以摆脱该区域的所有控制器,用通用控制器替换它们。
现在我想知道如何对视图进行相同的操作。在这个应用程序上,我有一个整体的application.html.erb布局,然后我必须有另一个布局层,对所有CRUD视图都是通用的,最后是“核心”部分:
在index.html.erb上,我需要生成一个包含我指示的字段和标签的简单表。
用于新的和编辑,也是通用表单版本,指示标签和字段(如果需要,可以提供自定义字段)。
我不确定我是否需要演出,但是如果我这样做会与新的和编辑相同。
哪些插件和工具(甚至文章和通用指针)可以帮助我完成这项工作?
谢谢, 菲利普。
答案 0 :(得分:1)
您可以运行script/generate scaffold test name:string description:text valid:boolean
并查看生成的视图(并运行script/destroy scaffold test
以删除文件)。这将使您更好地了解编写4个默认Rails视图的标准方法。
我还建议阅读“使用Rails进行敏捷Web开发”和“The Rails Way”中的相关章节。
如果您有现有的视图需要清理,那么Railscasts的这一集非常棒:Cleaning Up the View
D进制
答案 1 :(得分:1)
如果您已经干掉控制器并且现在希望干掉视图,那么一种方法是render :action => *actionname*
并存储可能更改为实例变量的UI内容(以便它们在视图中可用)这种方式您将能够重复使用编辑,新,列表或 show 的相同视图。例如,您正在编辑与 Foo 相关的内容,那么您的标题应该是Editing <%= @type %>
,那么您的表单助手也应如此。 Foo 然后可以更改为 bar 。因此,您将为不同的实体(或控制器,我应该说)重新使用相同的视图。请记住,与redirect_to
不同,render :action
仅呈现视图,并且不会调用它尝试呈现的操作的控制器操作。
有一件事是肯定的,如果你想干掉任何东西,你需要标准化或遵循惯例。例如,在这种情况下,您的视图的结构。
答案 2 :(得分:1)
看起来只有一个非常接近您要求的新宝石:
http://github.com/codez/dry_crud
基于一个常见的超类(CrudController),您可以为各种模型控制器继承CRUD功能并调整其中的特殊功能。这是你已经做过的,最有可能的。
关于dry_crud的新事物是视图和部分也是可继承的。您为每个CRUD操作定义一个公共基本模板,可能会分成几个部分。由于提供的帮助程序,可以通过查看当前模型的列定义来一般性地定义表单和表。在特定模型的视图中,您可以仅调整需要自定义的部分或视图。
查看上面网站上的文档并保持干燥状态!