有些使用Rails较长时间的人会说他们学到了一条重要课程:“不要使用脚手架”。我在IRC上也经常看到这个方向的提示。我的问题是,为什么?它有什么坏处?而 nifty_scaffolding 又是否糟糕呢?
我猜测它之所以不好,可能是因为它默认生成控制器动作的 XML 版本,这将向任何人公开应用程序的字段名称,并使其更容易受到攻击,所以可能是这个原因?
你不使用脚手架的原因是什么?
有些使用Rails较长时间的人会说他们学到了一条重要课程:“不要使用脚手架”。我在IRC上也经常看到这个方向的提示。我的问题是,为什么?它有什么坏处?而 nifty_scaffolding 又是否糟糕呢?
我猜测它之所以不好,可能是因为它默认生成控制器动作的 XML 版本,这将向任何人公开应用程序的字段名称,并使其更容易受到攻击,所以可能是这个原因?
你不使用脚手架的原因是什么?
我相信大多数专业人士避免使用脚手架,因为他们更喜欢测试驱动的开发方式来编写生产代码。这意味着他们想先编写一个失败的测试,然后再编写使该测试通过的代码。这是生成强大代码的好方法,但它在非常粒度化的层面上效果最佳。脚手架似乎一次做得太多,因此会打破编写特定功能的失败测试,然后编写使该特定功能通过的代码的紧密循环。重要的是养成这个习惯,并超越使用脚手架的便利性。
话虽如此,脚手架本身也可以非常强大。
了解rails generate scaffold命令的使用并注意其局限性是很重要的。脚手架可以帮助你快速启动一个项目并测试假设,但在真实世界中,它并不能让你走得太远。比如说,你使用脚手架创建了一个模型。
rails generate scaffold Article title:string body:text
太好了!现在你已经准备好了原型。但是现在假设你需要添加另一个字段“作者”。
rails generate migration add_to_article_author author:string
rake db:migrate
现在表格"articles"有了一个新的列,但是在/app/views/articles目录下的文件仍然保持原样,即表单不会有作者字段等。如果您再次运行脚手架命令
rails generate scaffold Article title:string author:string body:text --skip-migration
这一次你加了 "--skip-migrate",因为之前已经完成迁移,如果再次迁移同一个表,Rails会发出警告。现在scaffold会提示你覆盖它第一次创建的文件。覆盖也会销毁你对控制器/app/controllers/article_controller.rb或视图文件/app/views/article/show.html.erb或index.html.erb所做的任何更改。respond_with
(而是使用respond_to
),这会在不需要或不受欢迎的地方鼓励冗余代码。user_id
。在创建具有关系的模型的脚手架时,在表单中,该列显示为文本字段,而显然应该从URL中推断出来或通过其他更用户友好的界面进行选择。我不使用脚手架有两个原因:
你关心的XML问题并不是人们反对使用脚手架的原因。我不会为我的页面创建XML版本,因为这会使你的应用程序生成的路由数量增加一倍,从而稍微增加了开销...
rake routes
并查看每个路由末尾的隐式(.:format)
)。 - coreyward如果你是Rails的新手,使用scaffolding没什么用,因为你不理解所有不同文件是如何生成的,从学习角度来看,最好先了解Rails的工作原理,再使用scaffolding。
如果你已经有Rails的经验,使用scaffolding也没什么用,因为后端和API通常比简单的CRUD应用程序更复杂。如果我在当前项目中使用scaffolding,我需要删除很多样板文件。
我认为脚手架非常适合检查新版本的新内容(例如现在在Rails 4中的控制器参数允许的内容)。您可以将其用于快速原型设计。 通常,不需要生成完整的脚手架就可以实现目标。