我有时从那些似乎使用rails的人那里读到了更长的时间,他们学到的一个重要教训就是“不要使用脚手架”。同样在irc上我从这个方向读了一些提示。 我的问题是为什么,它有什么坏处?并且nifty_scaffolding也不好吗?
我的猜测是不好的,因为它默认生成控制器操作的xml版本,这会将我们应用程序的字段名称暴露给任何人并使其更容易受到攻击,所以也许就是这样?
你不做脚手架的原因是什么?
答案 0 :(得分:69)
我对rails很有经验,我很少使用脚手架,因为我的最终目标远非简单的CRUD操作。但是,没有严格的规则不使用脚手架。一些编码员对它不屑一顾,因为它实际上是 scaffolding 。它不是成品。 在构建实际产品时,Scaffolding会为您提供支持。搜索谷歌图片以获取“脚手架”,您应该明白这一点。
请注意scaffold
只是众多内置generators in Rails中的一个。 Rails生成器只是一个输出一些通用代码的脚本。生成器是非常有用的节省时间的,您可以快速找到自己writing generators来满足自己的自定义需求。
答案 1 :(得分:12)
我相信大多数专业人士都会避免使用脚手架,因为他们更喜欢使用测试驱动的开发方法编写生产代码。这意味着他们希望首先编写失败的测试,然后编写使测试通过的代码。这是生成强代码的好方法,但它在非常精细的级别上工作得最好。脚手架似乎一次做得太多,因此它破坏了为特定功能编写失败测试的紧密循环,然后编写使特定功能通过的代码。除了易于使用脚手架之外,养成这种习惯可能更为重要。
那说脚手架本身就非常强大。
答案 2 :(得分:9)
了解使用rails生成脚手架并了解其局限性非常重要。脚手架可以帮助您快速运行并测试假设。但在现实世界中,它不会让你走得太远。假设你创建了一个带脚手架的模型
rails generate scaffold Article title:string body:text
大!你现在有一个原型准备好了。但现在让我们说你必须添加另一个字段“作者”。
rails generate migration add_to_article_author author:string
rake db:migrate
现在表格文章有一个新列,但/ app / views / articles中的文件处于相同的旧状态,即表单不会有作者字段等。如果再次运行scaffold
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
由于任何有价值的Rails应用程序都有自定义代码(而不是脚手架创建的样板代码),Rails程序员应该只使用scaffold来测试一个想法。使用脚手架为您的客户提供一些可玩的东西。但在现实世界中,没有使用样板脚手架代码。
答案 3 :(得分:6)
脚手架并不适合生产使用。它的目的是让应用程序快速启动,然后可以修改或完成。
Rails 3脚手架实际上相当不错,但它仍然缺少一些处理嵌套资源的方法,并且它不使用更简单的respond_with
(超过respond_to
,这会鼓励冗长的地方它是不需要或欢迎的)。
默认支架表单不太可能无法修改 - 您可能在模型之间存在关系,这些关系转换为数据库中的列,如user_id
。在创建具有关系的模型的脚手架时,此列显示为表单中的文本字段,显然应该从URL推断出来,或者通过另一个更加用户友好的界面选择。
有很多像这样的小细节使得脚手架成为生产就绪的开箱即用代码的一个非常不可能的候选者。你当然可以通过生成脚手架然后填补空白并清理你不需要的区域来构建应用程序,我怀疑大多数Rails开发人员在某种程度上都这样做。
答案 4 :(得分:3)
我不使用脚手架有两个原因:
您的xml问题不是人们建议不要使用脚手架的原因。我不打扰我的页面的XML版本,因为它会增加你的应用程序必须生成的路由数量,这反过来会增加一些开销......
答案 5 :(得分:2)
到目前为止,人们已经说经验丰富的铁轨程序员不使用脚手架,主要是有充分理由。我主张初学者也不要使用脚手架。
你可能已经愉快地使用脚手架一段时间了,然后你意识到你忘了为你的Post模型包含published
布尔字段,所以你生成一个迁移来将属性添加到表中(你已经设法解决了这个问题)。然后,您还必须弄清楚如何将其添加到脚手架生成的表单中。 然后为你的生活,你无法解决为什么它在你提交你的表格时没有更新,经过多次冲突和浪费的时间你发现你不允许在该属性上进行质量分配,如脚手架为你做了其他人。事实证明,你对Rails的工作方式一无所知。
如果您正在学习Rails,如果您自己构建了V和V,那么您将更多地了解MVC。
答案 6 :(得分:0)
我认为脚手架非常适合检查新的rails版本的新东西(例如现在在rails 4中,params允许控制器中的东西)。您可以使用它进行快速原型设计。 通常很简单,没有必要生成一个完整的脚手架。
答案 7 :(得分:0)
我是专业的Rails开发人员,并且一直使用脚手架,实际上我可以说一个相当不错的论据,即脚手架的可重复性和可预测性可以使学习Rails和使用Rails的整个过程变得更加容易。
我们使用的方法是始终从脚手架开始,然后随着时间的流逝,我们会看到模式为项目自定义脚手架。
这种方法意味着我们有一种方法,当我们学习将知识重新烘焙到项目中时,当我们发现问题时,便将它们固定在一个地方,而脚手架的所有后续使用都具有学习能力,而不必不断地解释,论证并教育不同技能水平的不同开发人员。
以我的经验,rails的最大问题在于其最大的优势! Rails项目的可延展性是导致其难以维护的原因。实现相同目标的方法很多,这虽然没错,但确实使从开始该项目的其他人难以接受。
我们的方法有趣吗,值得商!!靠着铁轨而不是与之抗争时,它是否具有可重现,有效,高效的功能?100%是!