Как обновить значение записи данных с помощью Ruby on Rails 4.0.1/PostgreSQL Hstore?
Я сталкиваюсь с какой-то странной проблемой, которая должна быть ошибкой пользователя с моей стороны, но не могу понять.
Я использую Ruby 1.9.3-p194, Rails 4.01, PostgreSQL.
У меня есть модель Customer с столбцом datastrong > , который является hstore. По какой-то причине я не могу обновить столбец данных (hstore) любым новым ключом/значениями и не могу обновить существующее значение ключа. Я могу сделать вставку и указать любой ключ/значения без какой-либо проблемы.
Идентификатор клиента: 1, first_name: "Mark", last_name: "Test", data: { "balance" = > "0" }, created_at: "2013-11-27 14:39:09", updated_at: "2013-11-27 14:39:09"
c.data["balance"] = "100"
c.save
(0.2ms) BEGIN
(0,3 мс) COMMIT
= > true
Если я делаю update_attributes, он сохраняет его.
c.update_attributes({:data => {"balance" => "343"}})
Я не вижу ошибок или исключений, когда использовал c.save!. У кого-нибудь есть идеи?
Ответы
Ответ 1
Я все еще нуждался в этом, чтобы работать сейчас, и не мог дождаться, когда ошибка будет решена, поэтому здесь мой способ:
c.data["balance"] = "100"
c.data_will_change!
c.save
... и он сохранит в БД!
"attribute_name_will_change!" метод не так хорошо документирован и может быть найден во введении в модуль Active Model Dirty: http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
Ответ 2
Хорошо, наконец, нашел ответ на мой вопрос. Оказывается, это ошибка в Rails 4.0.
"Ошибка ActiveRecord Hstore: невозможно обновить ключ в хеше"
https://github.com/rails/rails/issues/6127
Ответ 3
Обновленные документы Hstore:
http://edgeguides.rubyonrails.org/active_record_postgresql.html#hstore
Они работают над тем же решением для обновления объектов Hstore и Json.
Это будет исправлено в Rails 4.2.
Pull-request: https://github.com/rails/rails/pull/15674