我有一个Ruby on Rails表单,它接受输入并将其保存为模型属性。但是,其中一个属性包含json数据。我希望能够将输入的数据输入到多个字段中,并将其作为单个JSON对象保存在models属性中。有没有办法可以做到这一点?
如果有帮助,我也可以制作哈希并将其转换为json。基本上我只想将多个输入字段合并为一个,然后从那里将其移除。
谢谢!
答案 0 :(得分:13)
这里有很多事情要考虑。
第一个问题是从HTML表单中获取数据。如果您使用标准Rails方式命名表单输入,那么它非常简单。
<input name="my_fields[value1]">
<input name="my_fields[value2]">
<input name="my_fields[sub1][value1]">
<input name="my_fields[sub1][value2]">
如果你这样命名,可以通过params
使用params[:my_fields]
哈希“en bloc”访问它们,这会给你另一个包含你数据的哈希。
然后您必须选择在模型中保存此数据的方法。有几种选择:
1。 使用字符串属性
只需使用string
或text
列并指定JSON字符串:
@my_model.my_data = params[:my_fields].to_json
2。 使用序列化哈希
使用string
或text
列并在模型中将其声明为可序列化
serialize :my_data, Hash
然后你可以使用这个列,因为它是一个简单的哈希,Rails将执行读写操作。
@my_model.my_data = params[:my_fields]
to_json
。3。 使用专门的JSON数据库类型
如果您需要能够使用SQL查询数据库,上述解决方案将无法正常工作。你必须使用专门的类型。
许多DBMS以XML或甚至JSON类型的形式提供结构化数据类型。 (例如PostgreSQL)
答案 1 :(得分:2)
您可以将所有多个文件保存为JSON格式的文本,以及何时需要解析该字段。
例如:
a = JSON.parse('{"k1":"val1"}')
a['k1'] => "val1"
答案 2 :(得分:0)
您可能正在寻找一个before_save
来获取所有模型属性并使用.to_json
方法创建JSON格式。
答案 3 :(得分:0)
你应该研究一下Postgres的新JSONB格式。我认为这会让你获得所有的PROS,而不是CONS: