【问题标题】:How to store child record while parent is being created如何在创建父项时存储子记录
【发布时间】:2018-11-08 17:37:23
【问题描述】:

我有一个用于创建/编辑游览记录的表格,has_many :excursion_images。

在这种形式中,嵌套的excursion_images是由一个带有远程调用(Fine Uploader)的js创建的。

此解决方案在编辑游览时完美运行,但不适用于创建,因为父级还没有id。

我有一个解决方案,但不确定是否有更好的选择:

  1. 允许在没有偏移的情况下创建 excursion_image。
  2. 在 _new 表单上创建一个带有“image_code”的隐藏字段。
  3. 创建 excursion_image 时,在表单内部,将相应的“image_code”保存在属性上。
  4. 保存行程时,查找所有带有“image_code”的excursion_image。

似乎效率不高!有没有其他办法?

【问题讨论】:

  • 或者要求在上传图片之前使用一些基本信息创建游览。如果稍后创建游览失败 - 您会将现有游览标记为已取消
  • 我不想妨碍体验,我喜欢让所有东西都在同一个视图上,如果用户想先上传图片,我宁愿让他。我想事先创建空的游览也可能是一个很好的解决方案,但这也让我犯了错误。
  • 您可以通过使用第一个上传的文件创建游览来保持体验。
  • “空”游览将扮演与您现在使用的“image_code”完全相同的角色,但以更易于理解的方式

标签: javascript ruby-on-rails ajax asynchronous model-view-controller


【解决方案1】:

您提出的解决方案非常完美。它似乎不是很有效,但这是唯一的方法。我认为没有任何解决方法可以将孩子存储在父母之前。

在我最终做你所做的事情之前,我自己也遇到过类似的情况。

只是您必须定期删除所有图像,其中 Excursion 为nil(根据@paul-noe 的comment)

【讨论】:

  • 是的,并且可以通过定期删除偏移为零的任何图像以更简单的方式完成。
  • 更新了答案
【解决方案2】:

我不知道你是否已经研究过,但我相信inverse_of可以用来解决这样的问题,有一些很好的解释here

它基本上可以帮助您处理内存中的关联记录

【讨论】:

  • 有趣,肯定比我使用的更好(第 1 步),问题是这需要同时发送两个对象,但是一旦文件上传,fineuploader 就会发送请求,这似乎更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
相关资源
最近更新 更多