我有一个 Ruby on Rails 表单,它接受输入并将其保存为模型属性。但是,其中一个属性包含 json 数据。我希望能够将输入到多个字段中的数据保存为我的模型属性中的单个 JSON 对象。有没有办法我可以做到这一点?
如果有帮助,我还可以制作一个哈希并将其转换为 json。基本上我只想将多个输入字段合并为一个,然后从那里传递出去。
谢谢!
我有一个 Ruby on Rails 表单,它接受输入并将其保存为模型属性。但是,其中一个属性包含 json 数据。我希望能够将输入到多个字段中的数据保存为我的模型属性中的单个 JSON 对象。有没有办法我可以做到这一点?
如果有帮助,我还可以制作一个哈希并将其转换为 json。基本上我只想将多个输入字段合并为一个,然后从那里传递出去。
谢谢!
这里有很多事情需要考虑。
第一个问题是从 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]
,这将为您提供另一个包含您的数据的哈希。
然后你必须选择在你的模型中保存这些数据的方式。有几种选择:
1.使用字符串属性
只需使用string
ortext
列并分配一个 JSON 字符串:
@my_model.my_data = params[:my_fields].to_json
2.使用序列化哈希
使用string
ortext
列并在模型上将其声明为可序列化
serialize :my_data, Hash
然后你可以使用这个列,因为它是一个简单的哈希,Rails 将执行读取和写入操作。
@my_model.my_data = params[:my_fields]
to_json
如果您需要真正的 JSON 字符串,则需要调用。3.使用专门的 JSON 数据库类型
如果您需要能够使用 SQL 查询数据库,上述解决方案将不起作用。您必须为此使用专门的类型。
许多 DBMS 以 XML 甚至 JSON 类型的形式提供结构化数据类型。(例如 PostgreSQL)
您可以将所有多个文件保存为 JSON 格式的文本,并在需要时解析该字段。
前任:
a = JSON.parse('{"k1":"val1"}')
a['k1'] => "val1"
您可能会寻找一个before_save
包含所有模型属性并使用方法创建 JSON 格式的.to_json
方法。
您可能应该研究一下 Postgres 的新 JSONB 格式。我认为这可以让您获得所有优点,而没有任何缺点: