从Rails表单创建一个json对象

Cam*_*ron 7 json ruby-on-rails

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

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

谢谢!

Dan*_*ski 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]">
Run Code Online (Sandbox Code Playgroud)

如果你这样命名就可以使用paramshash via "en bloc"访问它们params[:my_fields],这会给你另一个包含你数据的哈希.

然后,您必须选择在模型中保存此数据的方法.有几种选择:

1. 使用字符串属性

只需使用一个stringtext列并分配一个JSON字符串:

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

2. 使用序列化哈希

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

serialize :my_data, Hash
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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