2016-08-05 3 views
0

Мне нужна помощь У меня есть контроллер с действием, которое запрашивает две модели. Теперь мне нужно отправить их обоих как json, чтобы использовать их на моих угловых взглядах.Как визуализировать два объекта json как ответ на контроллер рельсов

В следующем примере, как мне отправить «сложный» и «поля» в один ответ json?

Ex.

def complexes_and_fields 
    complex = Complex.find(params[:id]) 
    search_params = {complex_id: complex._id} 
    fields = Field.where(search_params) 
    if !complex.nil? 
    render json: ???.to_json, status: :ok 
    else 
    render json: { error_description: 'no complex found' },status: :bad_request 
end 

ответ

1

Самый простой способ сделать это, чтобы построить хэш с объектами

complex = Complex.find(params[:id]) 
search_params = {complex_id: complex._id} 
fields = Field.where(search_params) 

render json: { complex: complex, fields: fields, search_params: search_params }, status: :ok 

Другой способ пользователю вид, такие как some_view.json.erb где вы предоставляете объекты, как вы ожидаете его в угловом зрения , Также вы можете использовать можно использовать ActiveModelSerializers, читайте на https://github.com/rails-api/active_model_serializers

В идеале, что вы хотите сделать, это инкапсулировать этот ответ в ее объект и сделать один вызов в контроллере, который возвращает вам результаты

Не вдаваясь в излишние много чего-то вроде этого

results = MyComplexFieldsObj.response(params[:id]) 
render son: results, status: :ok 
+0

Спасибо, первый вариант помог мне. Завершилось понимание и внедрение вашего решения с помощью службы поддержки Jim. Спасибо. – moplin

+0

Рад, что вы нашли его полезным @Pablo. Мне также нравится тот факт, что вы пошли с последним решением;) Я не поклонник повторения драгоценного камня, когда вы можете прийти к решению без зависимостей, если только это не сложно. –

+0

Я тоже люблю простоту, по моему опыту, неудачный режим с ранним связыванием с JSON довольно плох. Когда вы публикуете сообщения в блоге, скажем, вы включаете тела, но тогда во многих случаях вам нужны только заголовки и авторы. Вы в конечном итоге передаете опции to_json или тому подобное, и достаточно скоро у вас так много случаев, что вы хотите, чтобы у вас были только что построенные объекты. Все в порядке, но будьте осторожны! И когда вам нужно обновить API, ни одна чистая модель не задерживается. –

0

Это чрезвычайно распространенное требование в приложениях Rails. Эта потребность редко ограничивается одной моделью или одним местом. В результате существует множество драгоценных камней, обеспечивающих такую ​​функциональность (во многих случаях, без существенного изменения подписи ваших линий render).

This post предлагает хорошее объявление. Лично у меня был хороший опыт работы с active_model_serializers и приемлемый опыт работы с grape-entity. Разумно рассмотреть их документацию и решить, что лучше для вас.

+0

Спасибо, что эта страница дала мне много понимания того, как решить мою потребность в путях. Закончено с использованием последнего решения. Спасибо – moplin

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