Получение данных из всех таблиц в запросе соединения в Rails 3 - PullRequest
1 голос
/ 12 декабря 2010

Я хочу объединить древовидные таблицы и получить доступ к данным из ВСЕХ таблиц, а не только из одной.

Три таблицы называются: Страница, Текст, Изображение.

Я пытался с этим, но это не сработало:

@texts = Page.joins([:texts, :images]).where(['pages.id = ?', @page])

Основной страницей является страница с множеством текстов и изображений. Я хочу сделать запрос и получить данные от всех из них в одном запросе. Как это возможно в Rails 3? Я не могу найти хороший пример нигде, даже в официальных руководствах.

Обновление

Причина, по которой это делается вместо @ page.texts и @ page.images, заключается в том, что я могу печатать их только в виде «блоков». Я хочу смешивать тексты и изображения при печати. ​​

Ответы [ 3 ]

2 голосов
/ 20 мая 2011

Возможно, вы могли бы сделать подклассы текста и изображения нового «элемента страницы», чтобы вы могли установить одно отношение между элементами страницы и вашей страницей.

С другой стороны, вы можете использовать Page.join(:texts).select('texts.*') иизвлекать столбцы в таблице текстов как виртуальные столбцы объектов Page (у вас может быть объект Page только с виртуальными столбцами полей других таблиц, поэтому это решение может испачкаться).

0 голосов
/ 12 декабря 2010

Несколько вещей:

  • Посмотрите на эту страницу для помощи с объединениями. Обратите внимание: опция: include, которая позволит вам получать все данные по запросу для повышения производительности. Вам все еще нужно будет выполнить доступ через ActiveRecord (см. Ниже).

    http://www.railway.at/articles/2008/04/24/database-agnostic-database-ignorant/

  • Вам нужны все данные в одном гигантском хеше / массиве? Если у вас есть настройки ассоциации, вы можете просто сделать:

    @texts = @page.texts и @images= @page.images

Редактировать : Как насчет этого

@pages = Page.all(:include => [:texts, :images])
@pages.sort!{|a,b| a.texts.count <=> b.texts.count}

Документация: http://ruby -doc.org / core / classes / Array.html # M002186

0 голосов
/ 12 декабря 2010

Это стоит прочитать, и поможет решить вашу проблему:

http://guides.rubyonrails.org/association_basics.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...