У меня есть атрибут Hash в моей модели, который использует расширение Postgres hstore. Проблема в том, что этот атрибут конвертируется в String с помощью Rails4. Это не позволяет мне выполнять базовые операции, такие как .each
или .map
, для обработки моего хеш-атрибута.
При использовании консоли Rails Hash не конвертируется. Ввод:
@device.data
@device.data.class
Дает в консоли Rails:
{"city"=>"London", "owner_name"=>"John"}
Hash
А в самом приложении (с помощью навигатора):
"\"city\"=>\"London\","\"owner_name\"=>\"John\"
String
Есть ли у вас какие-либо идеи?
Обновлять:
Вот модель:
class Device < ActiveRecord::Base
belongs_to :company
has_many :records
validates :name, presence: true
end
И соответствующий файл миграции:
class CreateDevices < ActiveRecord::Migration
def change
create_table :devices do |t|
t.string :name
t.hstore :data
t.integer :company_id
t.timestamps
end
add_index :devices, :name
end
end
hstore
хранит ваш хеш как строку, это нормальное поведение. Rails создаетserialization
при загрузке столбцаhstore
- person Зелёный   schedule 04.12.2014@device.data['country']
? - person htaidirt   schedule 04.12.2014