Rails 5 API 仅从嵌套属性数组创建记录

Rails 5 API only creating records from nested attribute arrays

我是 Rails 的新手,想知道处理以下情况的正确 "Rails way" 是什么。我正在处理的应用程序是一个 Rails api-only 后端,带有 ReactJS 前端。在我的架构中,我有三个以各种方式关联的模型(稍后会详细介绍):作曲家、专辑、曲目。在客户端中,我创建了一个大致如下所示的对象:

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

关联如下:

update 作曲家、专辑或曲目记录对我来说很容易,因为我已经有了 id,而且似乎由 Rails 自动处理。 (酷!)

我的问题是:

有没有办法在 POST 请求中发送上面的对象,解析出我可以设置正确关联的专辑和曲目?

我的幼稚方法(我当时正在客户端上设置...我真的不想在那里做那种业务逻辑)结果如下:

  1. 创建 Composer 记录并 POST 到 Rails API。
  2. 创建 Album 记录并 POST 到 Rails API。
  3. 创建所有 Track 记录和 POST 到 Rails API。
  4. 使用作曲家和专辑 ID 更新每个 Track
  5. 更新 Album 以关联到 Composer

宁愿在API中处理所有这些。 (特别是因为我需要处理 Album 已经存在并且需要 更新 而不是 创建 的情况。)

所以从本质上讲,我希望客户只需像上面那样提交带有嵌套实体的对象,然后我完成所有设置新 ComposerAlbum 的工作, 以及后端的 Track 记录和关联。

这是可行的还是值得推荐的?如果是这样,我真的可以使用一个很好的文档来源或一个关于如何处理这种情况的教程。我的搜索技巧未能找到任何似乎可以解决此问题的内容。

谢谢!

事实证明,解决方案很简单,尽管我的架构实施起来太困难了。 曲目 专辑都与作曲家相关联太麻烦了,所以我否决了这个想法。 我发现我使用的是 :albums:tracks 而不是 :albums_attributes:tracks_attributes。这一变化使所有的关联魔法自动发生。