при передаче данных типа json

#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 в правильный формат, если это возможно.