Использование Ruby on Rails без ActiveRecord

Я подумывал о переходе с PHP на Ruby on Rails для своих веб-проектов, и больше всего меня беспокоит использование ActiveRecord для Rails. Мне кажется, что использование ActiveRecord очень сильно поощряется, а написание прямого SQL не одобряется. Посмотрев несколько проектов, я так и не увидел ни одного, в котором действительно используется SQL.

Мне еще не нравится ActiveRecord, в основном потому, что он требует изучения чего-то, что не кажется таким мощным, как простой SQL, например есть ли простой способ выполнить вложенный запрос с помощью группы by и предложения с ActiveRecord, или мне придется для этого перепрыгивать через обручи?

Кто-нибудь когда-нибудь использовал Rails без ActiveRecord? Если да, то каков был ваш опыт этого?


person adaykin    schedule 18.12.2010    source источник
comment
Не могли бы вы предоставить нам запрос, который вы используете в качестве примера?   -  person Ryan Bigg    schedule 18.12.2010
comment
Я не говорю о каком-то конкретном запросе, а просто о более сложных в целом.   -  person adaykin    schedule 19.12.2010
comment
Большим преимуществом использования ORM ActiveRecord, Sequel или Datamapper является переносимость. Если вы используете ORM, вы часто можете изменить DSN или URL-адрес подключения и работать с другим DBM без изменения кода. Написание SQL напрямую искушает нас использовать специфичные для DBM команды, которые снижают переносимость. ORMS дает нам возможность решать, когда использовать SQL напрямую или полагаться на их способность генерировать хороший код.   -  person the Tin Man    schedule 20.12.2010


Ответы (4)


Если вы не хотите использовать ActiveRecord, вам не нужно и вы можете определять чистый sql в своих моделях, если хотите. find_by_sql ('выбрать что угодно')

person mark    schedule 18.12.2010
comment
Спасибо за принятие, но ответ Райана намного более полный, чем мой, и очень хороший совет. - person mark; 19.12.2010

Три слова: Вот драконы.

Сойдя с пути выполнения вещей «Путь рельсов», вы встретите врагов невообразимой силы и хитрости. Сначала вы подумаете: «О, ХО, ХО, я делаю это по-своему, разве я не классный?». Тогда ты устанешь. Исчерпаны даже. К сожалению, во время борьбы вы посмотрите на все крутые жемчужины, которые используют Active Record, и удивитесь почему ты решил пойти по пути, столь чреватому гибелью и мраком, что Чак Норрис заставил бы себя обосрать себе в штаны.

Пожалуйста, не отклоняйтесь от Active Record. Оно здесь только для того, чтобы помогать вам, а не мешать вам. Если вы хотите писать свои собственные запросы, есть метод find_by_sql или даже более низкий метод Model.connection.execute. Однако их следует использовать, как и ядерное оружие, только во время исключительно тяжелых нужд.

Если вы вообще не хотите использовать Active Record, я бы посоветовал вам взглянуть на DataMapper или Mongoid.

DataMapper предоставляет большую часть той же функциональности, что и Active Record, а некоторые, как известно, предпочитают синтаксис. Небольшая мелочь: это была одна из первых жемчужин, совместимая с Rails 3.

Mongoid, с другой стороны, предназначен для баз данных MongoDB, которые также нравятся некоторым другим людям.

Еще раз умоляю: не сбивайтесь с проторенной дороги, чтобы не побить себя.

person Ryan Bigg    schedule 18.12.2010
comment
Видя, как я вижу имя Райана Бигга каждый день (помогая людям) в 3 часа ночи из рассылки Rails-Core, я предлагаю вам озвучить его слова. :) - person EnabrenTane; 24.12.2010
comment
И все же, что, если вы пытаетесь работать с существующей устаревшей базой данных, разделяемой многими старыми приложениями, структура которой явно не поддается ActiveRecord? - person Gregory Higley; 12.07.2013
comment
@GregoryHigley Тогда ты обречен. - person Ryan Bigg; 15.07.2013
comment
Сиквел вернул мне веру в Руби. Это действительно потрясающе. O / RM, на который я надеялся много лет. - Сэм Смут, создатель DataMapper - person nurettin; 03.07.2014

Вы можете использовать DataMapper. После написания приложений и инструментов Rails более года я - настоятельно - рекомендовал бы использовать ActiveRecord. Даже если вы когда-либо использовали только Model.find_by_sql («склонный к ошибкам рукописный sql с использованием полей, которые могут изменяться со временем») вместо Model.find_by_last_name («Smith»)

Многие умные люди потратили много часов, работая над ActiveRecord и ARL. Я прошу вас использовать их работу.

person EnabrenTane    schedule 18.12.2010

У других людей должна быть веская причина использовать ORM в своих приложениях Rails. :)

ORM, особенно с Rails 3, являются подключаемыми - вы можете легко использовать DataMapper или Sequel вместо ActiveRecord.

В любом случае модели являются важной (и очень мощной) частью любого фреймворка MVC. Много бизнес-логики помещено в модели - «толстые модели» - это своего рода рекомендуемый способ разработки.

Еще один хороший момент в отношении существующих ORM заключается в том, что они фактически позволяют (но не поощряют) вас напишите SQL вручную - при желании вы можете свободно писать все свои запросы вручную. Но даже тогда я бы порекомендовал вам оставить ваши запросы параметризованными и позволить библиотеке интерполировать ваши параметры (вы делаете это и в PHP, не так ли)?

person Mladen Jablanović    schedule 18.12.2010
comment
Да, я параметризую запросы в PHP ... но большинство PHP-фреймворков, которые я использовал, дают мне гибкость при написании запросов с использованием ActiveRecord или прямого SQL. Меня больше беспокоит то, что ActiveRecord не может выполнять некоторые из более сложных вещей, которые я хочу, а затем застрял в использовании этой конкретной парадигмы. - person adaykin; 19.12.2010