Колонка по ошибке возвращает ключ от HSTORE
Хорошо, у меня есть странный здесь. В приложении Rails 4.0.13 я добавил модель:
store_accessor :transcoding_meta, :state
Глядя на схему модели (SongVersion), transcoding_meta
Тип действительно hstore
,
Обратите внимание, что есть также state
столбец на SongVersion, который является строковым столбцом.
s = SongVersion.ready.last
s.transcoding_meta
=> {"state"=>"finished"}
s.state
=> "finished"
Фактически столбец состояния в базе данных сохраняется как "active"
как и ожидалось.
Почему Rails споткнулся? Могу ли я действительно не иметь hstore
ключ с тем же именем, что и существующий столбец? Кажется, он должен знать разницу.
1 ответ
.store_accessor
макрос, который определяет методы доступа для полей hstore Поскольку он вызывается внутри тела класса, сгенерированные аксессоры переопределяют для столбцов БД, предоставляемых ActiveRecord по умолчанию. Похоже, вы не можете хранить поле и столбец с одинаковым именем в модели.