Rails经常告诉我其他人在我遇到问题之前已经考虑过了,但这一次,我没有找到任何东西......
我有3个模型:Node
,Volume
和Filesystem
(我使用Mongoid,但我认为问题与ActiveRecord相同)
节点has_many
卷和文件系统;卷has_many
文件系统。
我在相同的“节点”中定义卷和文件系统。表单(使用JS更新每个文件系统""卷"在添加/更改/删除卷时选择框)。这个表格很好。
在保存节点时尝试保留文件系统时存在问题:
由于新卷还没有任何ID,我在选择框中使用卷名作为值,但外键是ID(名称在节点中是唯一的,但不同的节点将具有卷同名,所以我不能使用名称作为ID。
在nodes_controller
的{{1}}和create
操作中,我需要找到首先保存卷的解决方案,然后替换包含卷名的update
各自的身份证。这非常脏,我想知道是否可以用干净的方式完成。
还有其他人有同样的问题吗?
唯一真正"清洁"解决方案是在不同的步骤中保存卷和文件系统,但我的应用程序确实需要"更少的点击更好"因为params[:node][:filesystems_attributes]
包含许多其他嵌套模型(和表单)。
答案 0 :(得分:1)
Nested Attributes似乎就是你要找的东西。将它们添加到您的Node模型中,您应该准备好了。
accepts_nested_attributes_for :volumes, :filesystems
如果您使用表单助手
<%= form.fields_for :nodes do |nodes_form| %>
是定义子属性的方法。
答案 1 :(得分:0)
我刚刚将Filesystem嵌套到Volume而不是Node中,它就像魅力一样。
糟糕的设计会产生不好的问题; o)