在活动管理中将多个输入组合成 ruby 哈希



所以我有一个双重嵌套的关联,比如Foo有很多Bar,有很多BazBaz模型有一个名为data的序列化字段,它采用哈希的形式,将范围(即:1..3(映射到数值。{ (1..3) => 42 }

目前在活动管理员编辑页面中,我有类似的东西:

form do |f|
f.semantic_errors
f.has_many :bars, heading "Bar" do |t|
f.input :item_one
f.input :item_two
t.has_many :bazs do |r|
r.input :name
r.input :data, as: :string
end
end
end

如您所见,我正在将哈希处理为字符串,并将其呈现在编辑页面的文本框中。我希望能够遍历已经存在的数据并将它们渲染到单独的文本框中,以便可以单独编辑或删除它们......但是在提交表单时,它会将这些输入粘合在一起,并将数据作为哈希而不是字符串传递。

这可以通过编写自定义表单构建器来完成吗?最好的方法是什么?

我想构建一个可扩展的解决方案,不需要将任何代码写入模型或控制器。

感谢您阅读o//

更新: 我找到了一个适合我的解决方案。由于这里的全部问题是我们的数据在放入数据库时从 Hash 序列化为字符串,因此允许用户将此数据编辑为 JSON 并更改模型上的 setter 方法是有意义的,该方法获取数据以允许它解析 JSON。这使事情变得简单,因为我可以使用这个 JSON 编辑器小部件,用于提供用于编辑数据的漂亮 UI。然后,诀窍是学习如何将小部件应用于使用"添加新项目"按钮创建的项目。查看活动的管理源代码,我了解到我可以挂接到has_many_add:after事件中,以便在将 JSON 编辑器添加到 DOM 树后将 JSON 编辑器应用于添加的元素。

我会尝试使用装饰器从表单中隐藏转换。 否则,hstore编辑器可能会给你一些灵感。 我建议不要使用自定义表单构建器,尤其是嵌套has_many。

最新更新