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

Mar*_*ejo 4 postgresql json ruby-on-rails

我有一个来自我的活动管理员的json字符串 "{\"en\":\"Lorem\"}"

我想将其保存在question.namepostgres jsonb类型的字段中。

class Question < ActiveRecord::Base
  serialize :name
end

# db/schema.rb
create_table "preset_questions", force: :cascade do |t|
  t.jsonb    "name",               default: {}
end
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

question.update(name:"{\"en\":\"Lorem\"}")
question.update(name:JSON.parse("{\"en\":\"Lorem\"}"))
Run Code Online (Sandbox Code Playgroud)

两者的结果:

question.name
=> nil
Run Code Online (Sandbox Code Playgroud)

Mar*_*ejo 5

通过删除使它起作用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\"}"))
Run Code Online (Sandbox Code Playgroud)

都回来了

question.name
=> {"en"=>"lorem", "id"=>"ipsum"}
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用Rails 5.1.4,似乎将JSON字符串保存在JSONB字段中会将其保存为字符串而不是哈希 (2认同)