0

Rails 经常告诉我,其他人在我之前就已经考虑过我的问题,但这一次,我什么也没找到……

我有 3 个模型:NodeVolumeFilesystem(我使用的是 Mongoid,但我认为 ActiveRecord 的问题是一样的)

节点has_many卷和文件系统;卷has_many文件系统。

我以相同的“节点”形式定义卷和文件系统(当添加/更改/删除卷时,JS 会更新每个文件系统的“卷”选择框)。这种形式工作正常。

保存节点时尝试保留文件系统时存在问题:

由于新卷还没有任何 ID,我使用卷名称作为选择框中的值,但外键是 ID(名称在节点内是唯一的,但不同的节点将具有相同名称的卷,所以我可以'不要使用名称作为 ID)。

nodes_controller's createand updateactions 中,我需要先找到保存卷的解决方案,然后将params[:node][:filesystems_attributes]包含的卷名替换为它们各自的 ID。这很脏,我想知道是否可以以干净的方式完成。

有没有其他人有同样的问题?

唯一真正“干净”的解决方案是在不同的步骤中保存卷和文件系统,但我的应用程序确实需要“点击次数越少越好”,因为Node它包含许多其他嵌套模型(和表单)。

4

2 回答 2

1

嵌套属性似乎是您正在搜索的内容。将它们添加到您的 Node 模型中,您应该准备好了。

accepts_nested_attributes_for :volumes, :filesystems

如果您使用表单助手

<%= form.fields_for :nodes do |nodes_form| %>

是定义子属性的方式。

于 2012-08-27T21:02:59.473 回答
0

我刚刚将 Filesystem 嵌套到 Volume 而不是 Node 中,它就像一个魅力。

糟糕的设计会产生糟糕的问题;o)

于 2012-08-30T16:25:47.733 回答