Rails 经常告诉我,其他人在我之前就已经考虑过我的问题,但这一次,我什么也没找到……
我有 3 个模型:Node
,Volume
和Filesystem
(我使用的是 Mongoid,但我认为 ActiveRecord 的问题是一样的)
节点has_many
卷和文件系统;卷has_many
文件系统。
我以相同的“节点”形式定义卷和文件系统(当添加/更改/删除卷时,JS 会更新每个文件系统的“卷”选择框)。这种形式工作正常。
保存节点时尝试保留文件系统时存在问题:
由于新卷还没有任何 ID,我使用卷名称作为选择框中的值,但外键是 ID(名称在节点内是唯一的,但不同的节点将具有相同名称的卷,所以我可以'不要使用名称作为 ID)。
在nodes_controller
's create
and update
actions 中,我需要先找到保存卷的解决方案,然后将params[:node][:filesystems_attributes]
包含的卷名替换为它们各自的 ID。这很脏,我想知道是否可以以干净的方式完成。
有没有其他人有同样的问题?
唯一真正“干净”的解决方案是在不同的步骤中保存卷和文件系统,但我的应用程序确实需要“点击次数越少越好”,因为Node
它包含许多其他嵌套模型(和表单)。