我正在寻找一些关于
Ruby on Rails中不良做法的例子,以展示不该做的事情.
我最大的就是在模型after_save hook上使用update_attribute.
Object.update_attribute(:only_one_field,"Some Value")
由于这是一个非常开放的问题,我将等待一周或两周,并选择最多投票答案的答案.
玩得开心!
解决方法
>不使用attr_protected进行过多的质量分配
>使用太多插件 – 有太多的宝石和Rails有太多的插件可用于您的应用程序.但是,当您使用gem或插件时,您很少了解代码的运行方式(除非您实际查看源代码,大多数人从未这样做).这是一个巨大的问题.您不知道如何正确调试代码,插件和宝石相互冲突,安全性成为主要问题,等等.因此,我总是建议您编写所有自己的代码.当然,Devise很适合进行身份验证,但是你能告诉我它是如何工作的以及运行了什么查询吗?你能控制优化吗? (我不是在挑选Devise,只是展示了很多RoR开发人员熟悉的明显例子)/
>保持不需要的页面/操作 – 许多Rails开发人员使用脚手架(因为它很好),但随后他们不愿意删除不需要的操作.它就像添加:only =>一样简单[]或:except => []在您的路线文件中,但大多数人从不这样做!我不知道有多少Rails站点被黑客攻击或损坏,因为人们没有限制删除操作
>试图反对Ruby – 来自其他语言的开发人员经常遇到“Ruby-way”的困难.最值得注意的一个例子是具有非递增或非整数主键.
>太多的控制器,没有足够的模型–Rails有一个“胖模型,瘦的控制器”原则,太多的开发人员打破了.
>违反MVC – 访问模型中的参数,试图将东西入侵控制器等.
>不更改默认的Rails唯一会话令牌(实际上不是随机的)
>编写草率代码 – Ruby有一种使代码看起来可读的好方法.如果您来自Java或@R_301_461@甚至是Python,那么在您学习Ruby之前,您的代码就会非常难看
>说Rails“是一种语言”或“我在Rails中编码” – 当我听到有人说“我在Rails中编码”或“Rails是我最喜欢的语言”等时,绝对,肯定地说错了方法,等等.轨道不是一种语言. Rails是基于Ruby构建的 framework.这与安全性等无关,但是如果你开始说RAILS是一种语言,你真的会激怒很多RUBY开发者.这是一个框架. >比较@R_301_461@和Rails – 不要这样做.同样,@R_301_461@是一种语言,Rails是一种框架.比较它们是不公平的. (您可以比较Ruby和@R_301_461@ OR Rails以及CodeIgnitor或Cake@R_301_461@等) >没有正确捕捉错误 – 如果它可能出错,有人,认为它会,并提前计划 >未能优化查询 – 这绝对会让我失望. Rails不会强迫你像@R_301_461@那样知道sql(在ORM之前就像Doctrine一样),所以Rails应用程序往往是SLLLLOOOOWWW,除非开发人员确实知道你可以优化查询(连接说什么?) >使用太多的生成器 – 您应该能够在不使用生成器的情况下创建类(控制器,模型,测试,视图). >将Rails用于大型系统 – 是的,大多数人都不喜欢这样,但是如果你在Rails中构建你的前端和后端,请问Twitter和GitHub会发生什么……让我们说Twitter使用自定义Java后端现在…… >有一个奇怪的线索 – 我很生气,因为人们实际上并不知道如何使用has_many关系(只有21914232个愚蠢的Rails开发者的例子之一)! >不评论代码 >依靠Rails而不是sql或DOM(javascript / html)来执行功能
>使用太多插件 – 有太多的宝石和Rails有太多的插件可用于您的应用程序.但是,当您使用gem或插件时,您很少了解代码的运行方式(除非您实际查看源代码,大多数人从未这样做).这是一个巨大的问题.您不知道如何正确调试代码,插件和宝石相互冲突,安全性成为主要问题,等等.因此,我总是建议您编写所有自己的代码.当然,Devise很适合进行身份验证,但是你能告诉我它是如何工作的以及运行了什么查询吗?你能控制优化吗? (我不是在挑选Devise,只是展示了很多RoR开发人员熟悉的明显例子)/
>保持不需要的页面/操作 – 许多Rails开发人员使用脚手架(因为它很好),但随后他们不愿意删除不需要的操作.它就像添加:only =>一样简单[]或:except => []在您的路线文件中,但大多数人从不这样做!我不知道有多少Rails站点被黑客攻击或损坏,因为人们没有限制删除操作
>试图反对Ruby – 来自其他语言的开发人员经常遇到“Ruby-way”的困难.最值得注意的一个例子是具有非递增或非整数主键.
>太多的控制器,没有足够的模型–Rails有一个“胖模型,瘦的控制器”原则,太多的开发人员打破了.
>违反MVC – 访问模型中的参数,试图将东西入侵控制器等.
>不更改默认的Rails唯一会话令牌(实际上不是随机的)
>编写草率代码 – Ruby有一种使代码看起来可读的好方法.如果您来自Java或@R_301_461@甚至是Python,那么在您学习Ruby之前,您的代码就会非常难看
>说Rails“是一种语言”或“我在Rails中编码” – 当我听到有人说“我在Rails中编码”或“Rails是我最喜欢的语言”等时,绝对,肯定地说错了方法,等等.轨道不是一种语言. Rails是基于Ruby构建的 framework.这与安全性等无关,但是如果你开始说RAILS是一种语言,你真的会激怒很多RUBY开发者.这是一个框架. >比较@R_301_461@和Rails – 不要这样做.同样,@R_301_461@是一种语言,Rails是一种框架.比较它们是不公平的. (您可以比较Ruby和@R_301_461@ OR Rails以及CodeIgnitor或Cake@R_301_461@等) >没有正确捕捉错误 – 如果它可能出错,有人,认为它会,并提前计划 >未能优化查询 – 这绝对会让我失望. Rails不会强迫你像@R_301_461@那样知道sql(在ORM之前就像Doctrine一样),所以Rails应用程序往往是SLLLLOOOOWWW,除非开发人员确实知道你可以优化查询(连接说什么?) >使用太多的生成器 – 您应该能够在不使用生成器的情况下创建类(控制器,模型,测试,视图). >将Rails用于大型系统 – 是的,大多数人都不喜欢这样,但是如果你在Rails中构建你的前端和后端,请问Twitter和GitHub会发生什么……让我们说Twitter使用自定义Java后端现在…… >有一个奇怪的线索 – 我很生气,因为人们实际上并不知道如何使用has_many关系(只有21914232个愚蠢的Rails开发者的例子之一)! >不评论代码 >依靠Rails而不是sql或DOM(javascript / html)来执行功能