我有一些嵌套数据:
@preset = Preset.new
#fields is a postgres json data type
@preset.fields = {'primary_category' => {'category_id' => 57882}}
我想在params[:preset][:fields]
表单提交的 POST 中保留相同的嵌套结构,所以我的表单部分中有这个:
<%= text_field_tag("preset[fields][primary_category][category_id]",nil) -%>
简单形式不知道如何处理 postgres 新类型,如 hstore 或 json 类型。就我而言,我真的不需要它来验证或检测数据类型。有没有一种方法可以扩展 SimpleForm 以跳过对列类型的检测,并且只输出它为文本字段输出的相同的现有引导样板,但对于我的任意 json 嵌套键?
也许这样的用法:
<%= f.input 'preset[fields][primary_category][category_id]', :as => :json_text_field %>
输出与上面的 helper 相同的东西,但被标签和控制组分类的 div 等包围。
我已经研究过根据文档扩展输入基类。
class JsonTextFieldInput < SimpleForm::Inputs::Base
def input
"#{@builder.text_field(???, input_html_options)}".html_safe
end
end
但是这里是我迷路的地方,因为我不确定要传递什么来@builder
绕过使用我自己的逻辑检查属性名称来映射它的哈希键。此外,这只改变了表单输入而不是标签,这也需要一些修改。在任何一种情况下,我都无法走得很远,我可以使用一些指导。