【发布时间】:2017-08-22 21:02:48
【问题描述】:
所以我有一个双重嵌套的关联,例如 Foos 有许多 Bars 和许多 Bazs。 Baz 模型有一个名为 data 的序列化字段,它采用将范围(即:1..3)映射到数值的哈希形式。 { (1..3) => 42 }
目前在 Active Admin 编辑页面中,我有类似的内容:
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 editor widget 提供一个漂亮的 UI 来编辑数据。然后诀窍是学习如何将小部件应用于使用“添加新项目”按钮创建的项目。查看active admin source code,我了解到我可以挂钩has_many_add:after 事件,以便在已将其添加到DOM 树后将JSON 编辑器应用于添加的元素。
【问题讨论】:
-
我通常会通过向模型添加虚拟属性来做到这一点。您对将代码保留在帮助程序和视图中的感觉有多强烈?
标签: ruby-on-rails ruby hash activeadmin