2013-02-28 2 views
1

Таким образом, у меня есть иерархия схемы, как это:Загрузка данных из нескольких таблиц

Organization > Program >RegistryPatientCount 

так RegistryPatientCount держит program_id поле для доступа к Program таблице. (Скажем, это также имеет Имя столбец, для как название программы, и т.д ..)

Program таблица сохраняет organization_id поле для доступа к Organization таблице.

Тогда в моем controller#show метода у меня есть что-то вроде этого:

respond_to :json 

    def show 
    #TODO: Pagination. 
    @blah = Program.includes([:registry_patient_counts]).where(organization_id: params[:id]) 

    respond_with(@blah) 
    end 

* Примечание:. ИД паров будут organization_id *

Когда я запускаю это, он возвращает данные из Program таблицы , но я хотел, чтобы он возвращал данные из таблицы RegistryPatientCount, и следующим шагом было бы иметь возможность сверлить в таблицу программ, и вместо program_id будет отображаться имя из таблицы программ.

Но ничего не работает, как я уже сказал, он просто возвращает данные таблицы программ для данной организации.

ответ

1

Вы должны сообщить respond_with, что он должен включать дочерние элементы.

respond_with(@blah, include: :registry_patient_counts) 

Program.includes(...) просто говорит ActiveRecord, чтобы извлечь все данные с одного запроса. Затем вы можете работать с ним внутри контроллера без дополнительных запросов к базе данных.

Но методы respond with и render не зависят от этого. Обычно они возвращают только первый уровень иерархии.

+0

, но у меня есть и включает в registry_patient_counts первый вызов и присвоение его @blah ... зачем мне переделывать его в response_with? – 2013-02-28 20:38:15

+1

Я уже сказал вам в своем ответе ... Прочтите еще раз: 'Program.includes (...)' = ActiveRecord и 'response_with (..., include:)' = рендеринг JSON. Это две разные вещи. Первым из них является оптимизация запроса к базе данных (поиск «загружаемой загрузки»: http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations), а второй - о том, как будет выглядеть результирующий JSON (= какие данные он будет включать). –

+0

Хорошо имеет смысл ... так что, вероятно, лучший способ - использовать JBUILDER и разобрать и массировать, что @blah возвращается и использовать его. – 2013-02-28 21:03:28

-1

В консоли irb or Rails (рельсы c) вы можете увидеть, получаете ли вы данные из «RegistryPatientCount». Затем, если это работает, включите код в контроллер или где вы это делаете. Если у вас есть модель на месте и поле под названием "organization_id" Я хотел бы попробовать это:

@blah = RegistryPatientCount.where (: organization_id => Params [: ID])

+0

nop, RegistryPatientCount не имеет поля organization_id. Пожалуйста, снова прочитайте вопрос, я объяснил схему – 2013-02-28 20:36:05

Смежные вопросы