2012-01-18 20 views
5

Şimdiye kadar tamamen çözemediğim için ActiveSupport :: HashWithIndifferentAccess artık kullanamıyorum. ' Artık ActiveSupport :: HashWithIndifferentAccess olarak serileştirilemiyor

class Item < ActiveRecord::Base 
    serialize :metadata, ActiveSupport::HashWithIndifferentAccess 

(Ben denemek ve bunu birlikte zorlamak için seçeneği eklendi ama faydası olmadı Daha önce bu tüm çalışma iyiydi ve bende:

modelinin ilgili kısmı aşağıdaki gibidir. o var.)

Nesne bellekte olduğu sürece, her şey iyi çalışıyor. HashWithIndifferentAccess doğru ve hayat güzel.

mysql> select * from items; 
+----+------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+ 
| id | link | text  | metadata                                                                                                                                                                                       | category_id | 
+----+------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+ 
| 1 | NULL | Apple Store | --- 
id: 42cc7080f964a520e9251fe3 
name: Apple Store 
contact: 
    phone: '4153920202' 
    formattedPhone: (415) 392-0202 
location: 
    address: 1 Stockton St. 
    crossStreet: at Ellis St. 
    lat: '37.78573590563453' 
    lng: '-122.40610713227913' 
    distance: '1784' 
    postalCode: '94108' 
    city: San Francisco 
    state: CA 
    country: USA 
categories: 
    '0': 
    id: 4bf58dd8d48988d122951735 
    name: Electronics Store 
    pluralName: Electronics Stores 
    shortName: Electronics 
    icon: https://foursquare.com/img/categories/shops/technology.png 
    parents: 
    - Shops & Services 
    primary: 'true' 
verified: 'false' 
stats: 
    checkinsCount: '30462' 
    usersCount: '16105' 
    tipCount: '128' 
url: http://apple.com/sanfrancisco 
hereNow: 
    count: '7' 
| 1   | 
+----+------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+ 

bir HashWithIndifferentAccess geri zorla edilemez ve herşey böyle havaya uçurmak demektir: Bu

ActiveRecord::SerializationTypeMismatch in Index#index 

Showing /development/lists.io/website/app/views/users/_todo.html.haml where line #7 raised: 

Attribute was supposed to be a ActiveSupport::HashWithIndifferentAccess, but was a Hash 

o veritabanına kaydedilmesini sonra, bunun yerine bir Hash olarak kaydedilir Rails 3.1.3 kullanarak, mysql2 gem sürüm 0.3.10 kullanarak MySQL veri saklamak. Ben de 1.9.2p290 ruby ​​çalışıyorum. Herkesin yararlı olduğunu düşündüğü daha fazla bilgi ekleyebilirim, ancak bunu daha fazla hata ayıklamak için kaydım.

cevap

4

1.9.2 normalde YAML kütüphanesi olarak Psych içerir. link

bir standart olarak gerçeği Psych YAML izes ActiveSupport o :: HashWithIndifferentAccess: Ancak libyaml harici bağımlılık ve Syck (eski kütüphane) libyaml yoksa Yakut derlenmektedir kullanarak 1.9.2 varsayılan olduğunu hash Psych Github üzerinde bir oustanding issue olduğunu. Yine de 1.9.3'te sabitlenmiş gibi görünüyor.

3

Görünüşe göre bu sadece 1.9.2-p290 ile kırılmış.

1.9.3'e yükseltme veya 1,8,7'ye düşürme ve her şeyin şeftali. Bundan daha iyi bir cevaba sahip olmak isterim, eğer herhangi bir fikri varsa.

0

Yapabilirseniz, şanzımana geçin. application.rb olarak

:

require 'yaml' 
YAML::ENGINE.yamler = 'syck' 
0

Sadece durumda herkes Cevabı burada post ediyorum, buna benzer ama aynı değildir ben sahip oldum aynı sorun vardır. Modelde serileştirilmiş bir karma var, bu da db'ye doğru şekilde kaydediyor. Bir arayüzde, JS'deki karma değerini yeniden oluşturmanız gerekir. Bu, daha sonra doğru verilerden ziyade db içeren! Map: ActiveSupport :: HashWithIndifferentAccess girişleri oluşturur. Hash'i bir dize olarak oluşturuyorum ve daha sonra eval kullanarak bir hash'a dönüştürüyorum. Bu, gerektiğinde bir Hash oluşturdu. Ama daha sonra, hash, parazit karmasına geri kondu, bu yüzden denetleyicideki update_attribute'ları HashwithIndifferentAccess'e dönüştürerek problemi

İlgili konular