如何将哈希或json字符串保存到jsonb字段

时间:2016-02-12 10:36:51

标签: ruby-on-rails json postgresql

我的"{\"en\":\"Lorem\"}"

的活跃管理员中有一个json字符串

我想将此保存在我的question.name字段中,这是postgres jsonb类型。

class Question < ActiveRecord::Base
  serialize :name
end

# db/schema.rb
create_table "preset_questions", force: :cascade do |t|
  t.jsonb    "name",               default: {}
end

我尝试过以下方法:

question.update(name:"{\"en\":\"Lorem\"}")
question.update(name:JSON.parse("{\"en\":\"Lorem\"}"))

两者的结果:

question.name
=> nil

2 个答案:

答案 0 :(得分:4)

通过删除serialize :name来实现目标。看起来rails已经知道该做什么,因为列类型是jsonb

class Question < ActiveRecord::Base
end

# db/schema.rb
create_table "preset_questions", force: :cascade do |t|
  t.jsonb    "name",               default: {} 
end

question.update(name:"{\"en\":\"Lorem\"}")
question.update(name:JSON.parse("{\"en\":\"Lorem\"}"))

两者都返回

question.name
=> {"en"=>"lorem", "id"=>"ipsum"}

答案 1 :(得分:1)

在Rails中,您可以在ActiveRecord模型中指定它必须在保存列之前对其进行序列化,并在读取后对其进行反序列化。它使您能够将任何结构保存在数据库的字符串列中。

class Question < ActiveRecord::Base
   serialize :name
end

然后您可以像这样保存哈希:

question.update(name: {en: "Lorem"} }

文档:http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html