Колонка по ошибке возвращает ключ от 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 по умолчанию. Похоже, вы не можете хранить поле и столбец с одинаковым именем в модели.

Другие вопросы по тегам