【问题标题】:store_accessor not saving in postgresqlstore_accessor 没有保存在 postgresql 中
【发布时间】:2014-07-08 09:48:13
【问题描述】:

我在数据库中有下表

+----+-------------+------------+
| id | name        | data       |
+----+-------------+------------+
| 1  | string      | hstore     |
+----+-------------+------------+

以下型号

class Book < ActiveRecord::Base
  store_accessor :data, :author, :pages
end

但是,当我运行以下命令时,从 store_accessor 生成的写入方法不会保存到数据库中:

> Book.create name: "Catch-22", author: "Joseph Heller"
   (0.1ms)  BEGIN
   (1.6ms)  COMMIT
+----+-------------+-----------------------------+
| id | name        | data                        |
+----+-------------+-----------------------------+
| 1  | Catch-22    | {"author": "Joseph Heller"} |
+----+-------------+-----------------------------+
> book = Book.find(1)
   (0.1ms)  BEGIN
   (0.1ms)  COMMIT
+----+-------------+-----------------------------+
| id | name        | data                        |
+----+-------------+-----------------------------+
| 1  | Catch-22    | {"author": "Joseph Heller"} |
+----+-------------+-----------------------------+
> book.pages = "453"
"453"
> book.save
   (0.1ms)  BEGIN
   (0.1ms)  COMMIT
true
> book
+----+-------------+-----------------------------+
| id | name        | data                        |
+----+-------------+-----------------------------+
| 1  | Catch-22    | {"author": "Joseph Heller"} |
+----+-------------+-----------------------------+
> book.pages
nil

据我了解,store_accessor 生成的 setter 方法应该将键值对合并到原始哈希中,但似乎并非如此。如何让它们合并到新数据中?

【问题讨论】:

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 hstore


【解决方案1】:

我不确定这是否是 rails hstore 实现中的错误或功能。 ActiveRecord 无法识别 hstore 属性已更改并且不保存它。所以你必须强制执行。

book = Book.find(1)
book.pages = "453"
book.data_will_change!
book.save

book.data_will_change! 强制数据属性保存。

【讨论】:

  • github.com/rails/rails/blob/… 似乎 rails 会自动发送该方法。显式调用它仍然不会导致它在数据库中更新
  • 哦,我的错 - 调用它确实有效!在我的示例中,我只是没有将它保存在变量中,所以当我复制粘贴时,什么也没发生。很奇怪,你必须明确地调用它!
  • JSONB 列的相同问题和相同解决方案...非常奇怪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2017-08-10
  • 2015-11-30
  • 2016-01-01
  • 1970-01-01
  • 2018-12-15
  • 2011-07-23
相关资源
最近更新 更多