ruby-on-rails - 将键值推送到 jsonb 字段

标签 ruby-on-rails jsonb

我最近在我的一个表中添加了一个 jsonb 字段

add_column :users, :preferences, :jsonb, null: false, default: '{}'

我正在存储这样的值:

user = User.first
user.preferences = { job: "programmer" }

现在我想将另一个键值对推送到我的 jsonb 字段,我在控制台中尝试了此操作:

user = User.first
user.preferences.merge(twitter_account: "something")
user.save

我得到了类似的东西

....
(0.3ms)  COMMIT
=> true 

这通常意味着它已保存!但是当我检查preferences的值时,我没有看到任何附加值,即使当我退出控制台并再次重新运行rails控制台时,我也可以看到任何变化

这是这样做的方法还是我错了?

最佳答案

当您使用merge时它返回带有添加值的哈希值,但要将值添加到哈希值,您需要使用 merge!

我认为正确的方法是

user.preferences = user.preferences.merge(twitter_account: "something")

关于ruby-on-rails - 将键值推送到 jsonb 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39226261/

相关文章:

java - JOOQ 如何根据其他列值转换JSON?

sql - 为存储在 JSONb 列中的 Json 属性创建索引,该列包含 Postgres 中的 json 数组

ruby-on-rails - 如何告诉 capybara-webkit 不要忽略确认框(或者只是测试它们的内容)

ruby-on-rails - 使用 LDAP 进行 Rails 身份验证

ruby-on-rails - 如何在异常/完成时在 Rails 控制台中发出警报

json - 如何修改 PostgreSQL JSONB 数据类型中的单个属性值?

java - PostgreSQL 使用 JPA 和 Hibernate 抛出 "column is of type jsonb but expression is of type bytea"

ruby-on-rails - 子域名 Nginx 返回 403 禁止用于 unicorn/rails 设置

ruby-on-rails - 从 Rails 3 Controller 抽象资源名称

java - 在没有代码生成器的情况下在 postgreSQL 上使用 Jooq 和 jsonb_agg?