从Rails表单创建一个json对象

时间:2012-12-26 23:25:47

标签: ruby-on-rails json

我有一个Ruby on Rails表单,它接受输入并将其保存为模型属性。但是,其中一个属性包含json数据。我希望能够将输入的数据输入到多个字段中,并将其作为单个JSON对象保存在models属性中。有没有办法可以做到这一点?

如果有帮助,我也可以制作哈希并将其转换为json。基本上我只想将多个输入字段合并为一个,然后从那里将其移除。

谢谢!

4 个答案:

答案 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。 使用字符串属性

只需使用stringtext列并指定JSON字符串:

@my_model.my_data = params[:my_fields].to_json
  • Pro:一个非常简单的解决方案。
  • Contra:SQL查询几乎不可能。使用Rails处理需要手动解析数据字符串。

2。 使用序列化哈希

使用stringtext列并在模型中将其声明为可序列化

serialize :my_data, Hash

然后你可以使用这个列,因为它是一个简单的哈希,Rails将执行读写操作。

@my_model.my_data = params[:my_fields]
  • Pro:还是一个简单的解决方案。没有搞乱JSON字符串。使用Rails处理更容易。
  • Contra:SQL查询几乎不可能。如果您需要真正的JSON字符串,则需要调用to_json

3。 使用专门的JSON数据库类型

如果您需要能够使用SQL查询数据库,上述解决方案将无法正常工作。你必须使用专门的类型。

许多DBMS以XML或甚至JSON类型的形式提供结构化数据类型。 (例如PostgreSQL)

  • Pro:可以进行数据库查询。
  • Contra:自定义解析和序列化,迁移同上。该解决方案可能过度设计。

答案 1 :(得分:2)

您可以将所有多个文件保存为JSON格式的文本,以及何时需要解析该字段。

例如:

a = JSON.parse('{"k1":"val1"}')
a['k1'] => "val1"

答案 2 :(得分:0)

您可能正在寻找一个before_save来获取所有模型属性并使用.to_json方法创建JSON格式。

答案 3 :(得分:0)

你应该研究一下Postgres的新JSONB格式。我认为这会让你获得所有的PROS,而不是CONS:

http://robertbeene.com/rails-4-2-and-postgresql-9-4/