Почему бы вам не использовать AREL по своей сути. Как только вы перейдете к реальной области таблицы, вы можете использовать Arel :: Relation, который ПОЛНОСТЬЮ отличается от самой реализации ActiveRecord. Я искренне верю, что ActiveRecord :: Relation является ПОЛНОСТЬЮ другой (и отключенной) реализацией оболочки вокруг Arel :: Relation & Arel :: Table. Я решил использовать Arel в своей основе, либо выполнив Thing.scoped.table (Arel :: Table), который является стилем активной записи, ИЛИ Arel :: Table.new (: table_name), который дает мне свежий Arel :: Table (мой предпочтительный метод). Из этого вы можете сделать следующее.
posts = Arel::Table.new(:thing, :as => 'p') #derived relation
comments = Arel::Table.new(:comments, :as => 'c') # derived relation
posts_and_comments = posts.join(comments).on( posts[:id].eq(:comments[:id]) )
# now you can iterate through the derived relation by doing the following
posts_and_comments.each {...} # this will actually return Arel::Rows which is another story.
#
Arel :: Row возвращает ИСТИННОЕ определение кортежа из набора, который будет состоять из Arel :: Header (набор Arel :: Attributes) и кортежа.
Также немного более многословно, причина, по которой я использую Arel в своей основе, заключается в том, что он действительно предоставляет мне реляционную модель, которая является силой ActiveRelation. Я заметил, что ActiveRecord демонстрирует примерно 20% от того, что может предложить Арель, и я боюсь, что разработчики не поймут этот NOR, если они поймут истинное ядро реляционной алгебры. Использование хэша условий для меня - «старая школа» и программирование в стиле ActiveRecord в мире реляционной алгебры. Как только мы научимся отрываться от подхода, основанного на модели Мартина Фаулера, и принять подход, основанный на реляционной модели Э. Ф. Кодда, на самом деле это то, что СУБД пытались сделать десятилетиями, но ошиблись.
Я позволил себе начать серию из семи частей по Арелю и Реляционной Алгебре для сообщества рубинов. Они будут состоять из коротких видеороликов, начиная от абсолютного новичка до продвинутых техник, таких как отношения со ссылками на себя и замыкание в композиции. Первое видео на http://Innovative -Studios.com / # pilot Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, или она не достаточно описательна для вас.
Будущее выглядит ярко с Арелом.