Вы правы, что скрытие 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. Свернутый код с несколькими условиями всегда сложнее отлаживать и тестировать. Почему бы не сделать это легко для вас?
Последнее, что мне действительно нравится в ActiveRecord вместо SQL, это обратные вызовы. Обратные вызовы можно эмулировать с помощью триггеров SQL (которые доступны только в MySQL 5.0 или более поздней версии), в то время как ActiveRecord с тех пор имела обратные вызовы (я начал с 0.13).
Подведем итог:
- ActiveRecord облегчает работу;
- ActiveRecord удаляет скучные, повторяющиеся части;
- ActiveRecord не мешает вам писать свой собственный SQL (обычно по соображениям производительности) и, наконец,
- ActiveRecord полностью переносим для большинства систем баз данных, в то время как сам SQL - нет (иногда).
Я знаю, что в вашем случае вы говорите конкретно о MySQL, но все же. Иметь вариант приятно.