2017-01-27 1 views
0

Je suis nouveau sur Rails et je me demande quelle est la bonne manière de "Rails" pour gérer la situation suivante. L'application sur laquelle je travaille est un backend api-only avec un frontal ReactJS. Dans mon schéma j'ai trois modèles qui sont associés de différentes manières (plus sur cela dans un peu): Compositeur, Album, Piste. Dans le client je créer un objet qui ressemble à peu près comme ceci:Rails 5 API ne crée que des enregistrements à partir de tableaux d'attributs imbriqués

{ 
    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', 
      }, 
     ] 
     }, 
    ] 
    } 
} 

Les associations sont les suivantes:

  • Compositeurs et albums sont associés à la relation has_many through (compositeurs peuvent avoir de nombreux albums et les albums peuvent avoir beaucoup de compositeurs).
  • Album has_many pistes, et chaque piste belongs_to un seul album.
  • Compositeur has_many pistes et chaque piste belongs_to un seul compositeur.

Il est facile pour moi de update Composer, Album, ou parce que je Track Records ai déjà id et qui semble être traitée automatiquement par Rails. (Cool!)

Ma question est la suivante:

Est-il possible d'envoyer l'objet ci-dessus dans une requête POST qui parse les albums et les pistes où je peux définir les associations appropriées?

Ma méthode naïve (que j'étais en train de mettre en place sur le client ... et je vraiment ne veux pas faire ce genre de logique métier là-bas) se termine comme suit:

  1. Créez l'enregistrement Composer et POST vers l'API Rails. Créez l'enregistrement Album et l'API POST vers Rails.
  2. Créez tous les enregistrements Track et POST vers l'API Rails.
  3. Mettez à jour chaque Track avec les ID Composer et Album.
  4. Mettre à jour le Album à associer au Composer.

Je voudrais beaucoup gérer plutôt tout cela dans l'API. (Surtout parce que je dois faire face aux situations où le Album existe déjà et doit être mis à jour comme pied opposé créé.)

Donc, en substance, j'espère que le client vient de soumettre l'objet avec imbriqué entités comme il est ci-dessus, alors je fais tout le travail de mise en place de nouveaux enregistrements Composer, Album, et Track sur le dos.

Est-ce faisable ou même recommandé?Et si oui, je pourrais vraiment utiliser une bonne source de documentation ou un tutoriel sur la façon dont cette situation est gérée. Mes compétences de recherche n'ont pas réussi à donner quelque chose qui semble résoudre ce problème.

Merci!

Répondre

0

Il s'avère donc que la solution était simple, même si mon schéma allait être trop difficile à implémenter. Avoir les deux les pistes et albums associés à des compositeurs était trop de problèmes, donc j'ai nié cette idée. J'ai découvert que j'utilisais :albums et :tracks au lieu de :albums_attributes et :tracks_attributes. Ce changement fait que toute la magie de l'association se produit automatiquement.