#ruby-on-rails #mysql-json
Вопрос:
В моем приложении я получил item_specs
таблицу, которая имеет следующую структуру :
------------- ------------- ------ ----- --------- ---------------- | Field | Type | Null | Key | Default | Extra | ------------- ------------- ------ ----- --------- ---------------- | id | bigint(20) | NO | PRI | NULL | auto_increment | | item_id | bigint(20) | YES | MUL | NULL | | | item_spec | json | YES | | NULL | | ------------- ------------- ------ ----- --------- ----------------
В моей item
модели я получил следующее отношение к item_spec
has_one :spec, class_name: 'ItemSpec'
и там я получил следующий метод для извлечения спецификаций
def specs return [] if spec.blank? item_spec_hash = JSON.parse(spec.item_spec) item_spec_hash["specs"].map { |spec| Hashie::Mash.new(spec) } end
когда я запускаю это, чтобы получить объект item, я получаю следующую ошибку :
ActionView::Template::Error (no implicit conversion of Hash into String):
specs
используется для передачи данных json json.builder
следующим образом:
if @item.specs.present? json.specs @item.specs do |spec| json.name spec.spec_name json.value spec.spec_value end else json.specs []
конец
Запись в item_specs
таблице :
---- ------------- --------------- | id | item_id | item_spec | ---- ------------- --------------- | 1 | 579083 | {"length": 3} | ---- ------------- ---------------
В чем причина этой ошибки? данные в item_spec
неправильном формате? Это проверенный код, поэтому я не предпочитаю изменять код, я хочу вставить данные item_spec
в правильный формат, если это возможно.