mysql - 为什么使用 ActiveRecord 而不是 MySql API

标签 mysql ruby-on-rails activerecord

我开发 Web 应用程序已经有一段时间了,我对 mySql 非常满意,事实上,我几乎每天都使用某种形式的 SQL。我喜欢这种语法,并且编写查询或优化表的问题为零。我很喜欢这个mysql api .

一直困扰我的是 Ruby on Rails 使用 ActiveRecord 并迁移所有内容,因此您可以使用函数来查询数据库。我想这个想法是你“永远不必再看 SQL”。也许这不是 KISS(保持简单愚蠢),但是 ActiveRecord 界面真的是最好的吗?如果是这样为什么?

无需编写 SQL 语句的开发是否健康?如果您需要查找尚未定义为 Rails 函数的内容怎么办?我知道他们有一个功能可以让我进行自定义查询。我想我真的想知道人们认为使用 ActiveRecord 相对于 mySQL 的优点是什么,如果有人像我一样觉得这对于 Rails 社区来说可能就像计算器对于数学社区一样,有些人可能会忘记如何长时间做部门。

最佳答案

你是对的,将 SQL 隐藏在 ActiveRecord 层后面意味着人们可能会忘记检查生成的 SQL。我自己也被这个问题困扰过:缺少索引、低效查询等等。

ActiveRecord 让简单的事情变得简单:

Post.find(1)

对比

SELECT * FROM posts WHERE posts.id = 1

作为开发人员,您需要输入的内容较少,因此出错的机会也较少。

验证是 ActiveRecord 使之变得简单的另一件事。无论如何你都必须这样做,那么为什么不找一个简单的方法来做到这一点呢?将重复、无聊的部分抽象出来?

class Post < ActiveRecord::Base
  validates_presence_of :title
  validates_length_of :title, :maximum => 80
end

对比

if params[:post][:title].blank? then
  # complain
elsif params[:post][:title].length > 80 then
  # complain again
end

同样,易于指定,易于验证。想要更多验证吗?添加到 ActiveRecord 模型的单行。具有多个条件的复杂代码总是更难调试和测试。为什么不让你轻松一点呢?

相对于 SQL,我真正喜欢 ActiveRecord 的最后一点是回调。回调可以用 SQL 触发器来模拟(仅在 MySQL 5.0 或更高版本中可用),而 ActiveRecord 从那时起就已经有了回调(我从 0.13 开始)。

总结一下:

  • ActiveRecord 让简单的事情变得简单;
  • ActiveRecord 消除了无聊、重复的部分;
  • ActiveRecord 不会阻止您 writing your own SQL (通常出于性能原因),最后;
  • ActiveRecord 在大多数数据库引擎中都是完全可移植的,而 SQL 本身(有时)则不然。

我知道在你的例子中你正在专门谈论 MySQL,但仍然如此。有这个选择很好。

关于mysql - 为什么使用 ActiveRecord 而不是 MySql API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161108/

相关文章:

mysql - N :N Relation Mysql

mysql - count 方法根据条件中的日期返回不同的值

ruby-on-rails - Redirect_to 从设计创建到模型创建 - 使用帮助程序 - 语法错误

ruby-on-rails - 如何一步建立一个带有子工厂的父工厂以通过验证

ruby-on-rails - Rails rake db :migrate has no effect

ruby-on-rails - 如何使用动态属性对问卷数据库关系建模

php - MYSQL中存储的汉字在CI中不显示

php - 连接 MySQL 中的 3 个表,并根据用户输入搜索连接

mysql - 仅针对 MyISAM 表更改 mysql 中的表

sql - 如何在 Ruby 中使用 ActiveRecord 跨字段搜索一系列可选值?