2017-01-27 15 views
0

Я новичок в Rails и задаюсь вопросом, каков правильный «Rails way» для обработки следующей ситуации. Приложение, над которым я работаю, - это бэкэнд Rails с поддержкой Api с интерфейсом ReactJS. В моей схеме у меня есть три модели, которые связаны по-разному (подробнее об этом немного): Composer, Album, Track. В клиенте я создать объект, который выглядит примерно так:Rails 5 API, создающий только записи из вложенных массивов атрибутов

{ 
    composer: { 
    name: 'Foo', 
    other_info: 'Blah Blah', 
    albums: [ 
     { 
     title: 'Album 1', 
     tracks: [ 
      { 
      title: 'Track 1', 
      }, 
      { 
      title: 'Track 2', 
      }, 
     ] 
     }, 
     { 
     title: 'Album 2', 
     tracks: [ 
      { 
      title: 'Track 1', 
      }, 
      { 
      title: 'Track 2', 
      }, 
     ] 
     }, 
    ] 
    } 
} 

Ассоциация является:

  • Композиторов и альбомы связаны с has_many through соотношения (Композиторы могут иметь много альбомов и альбомы могут иметь много композиторов).
  • Альбом has_many треков и каждого трека belongs_to одного альбома.
  • Композитор has_many дорожки и каждый трек belongs_to один композитор.

Легко для меня update композитора, альбом, или дорожка записи, потому что у меня уже есть id и что, как представляется, обрабатываются автоматически Rails. (Круто!)

Мой вопрос заключается в следующем:

Есть ли способ, чтобы отправить объект выше в POST запрос, который будет анализировать вне альбомов и треков, где я могу установить правильные ассоциации?

Мой наивный метод (который я был в процессе настройки на клиенте ... и я действительно не хочу делать что-то бизнес-логику там) заканчивается в следующем виде:

  1. Создайте запись Composer и POST в Rails API.
  2. Создайте запись Album и POST в Rails API.
  3. Создайте все записи Track и POST в Rails API.
  4. Обновление каждого Track с идентификаторами композитора и альбома.
  5. Обновить Album для связи с Composer.

Я бы много достаточно обрабатывал все это в API. (Тем более, что мне нужно, чтобы справиться с ситуациями, когда Album уже существует и должен быть обновленный в отличие схождение создал.)

Таким образом, в сущности, я надеюсь, что клиент просто должен представить объект с вложенными сущности, поскольку это выше, то я делаю всю работу, устанавливая новые Composer, Album и Track записи и ассоциации на заднем конце.

Это возможно или даже рекомендуется?И если это так, я могу действительно использовать хороший источник документации или учебник о том, как эта ситуация обрабатывается. Мои навыки поиска не уступили ничего, что похоже на решение этой проблемы.

Спасибо!

ответ

0

Так получилось, что решение было простым, хотя моя схема была слишком сложной для реализации. Имея и треков и альбомов, связанных с композиторами, было слишком много неприятностей, поэтому я прикрепил эту идею. Я обнаружил, что использовал :albums и :tracks вместо :albums_attributes и :tracks_attributes. Это изменение делает автоматическую магию ассоциации автоматически.