2012-01-18 3 views
5

कारणों से कि मैं अब तक पूरी तरह से समझने में असमर्थ हूं, अब मैं ActiveSupport :: हैशविथ इंडिफेंडरएप का उपयोग करने में सक्षम नहीं हूं।सक्रिय समर्थन के रूप में serialize करने में असमर्थ :: हैशविथ इंडिफेंडरएप अब

मॉडल की प्रासंगिकता का इस तरह दिखता है:

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

(मैं कोशिश करते हैं और इसके साथ के लिए मजबूर करने का विकल्प जोड़ा है, लेकिन यह नहीं मदद की है इससे पहले यह था सब ठीक काम कर रहा है, और मैं नहीं था '। टी वहाँ है।)

जब तक वस्तु स्मृति में है, सबकुछ ठीक काम करता है। यह सही ढंग से एक हैशविथ इंडिफरेंस एक्सेस है, और जीवन अच्छा है।

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   | 
+----+------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+ 

यह एक HashWithIndifferentAccess में वापस मजबूर नहीं किया जा सकता है और चीजें इस तरह उड़ा जिसका मतलब है:

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 

यह वह जगह है यह डेटाबेस के लिए सहेजा जाता है एक बार, यह बजाय एक हैश के रूप में सहेज लिया जाता है रेल 3.1.3 का उपयोग करके, mysql2 मणि ​​संस्करण 0.3.10 का उपयोग कर MySQL में डेटा संग्रहीत करना। मैं रूबी 1.9.2 पी 2 9 0 भी चला रहा हूं। मैं अब और जानकारी जोड़ सकता हूं कि किसी को भी मददगार लगेगा, लेकिन मुझे इस बात पर नुकसान हुआ है कि इसे आगे कैसे डिबग करना है।

उत्तर

4

1.9.2 आम तौर पर साइको को वाईएएमएल लाइब्रेरी के रूप में शामिल करता है। link

तथ्य यह है कि साइक YAML-izes ActiveSupport :: HashWithIndifferentAccess एक मानक के रूप: हालांकि, libyaml एक बाहरी निर्भरता, और Syck (पुराने पुस्तकालय) यदि libyaml उपलब्ध नहीं है रूबी संकलित किया गया है जब उपयोग करने के लिए 1.9.2 चूक है हैश साइंस गिथब पर oustanding issue है। हालांकि 1.9.3 में तय किया जाना प्रतीत होता है।

3

स्पष्ट रूप से यह सीधे 1.9.2-पी 2 9 0 के साथ टूट गया है।

1.9.3 में अपग्रेड करना, या 1.8.7 और डाउनग्रेडिंग 1.8.7 और सबकुछ की आड़ू। मुझे उससे बेहतर जवाब पसंद आएगा, हालांकि, अगर किसी के पास कोई विचार है।

0

यदि आप कर सकते हैं, तो सिक पर स्विच करें।

application.rb में:

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

बस मामले में किसी को भी एक ही समस्या मैं कर रहा किया गया है, जो इस के समान, लेकिन एक ही नहीं, मैं इस सवाल का जवाब यहाँ पोस्टिंग कर रहा हूँ है। मेरे पास एक हैश है जो मॉडल में क्रमबद्ध है, जो डीबी को सही ढंग से सहेज रहा है। एक इंटरफ़ेस में मुझे जेएस में हैश को पुन: उत्पन्न करने की आवश्यकता है, जो तब डीबी में प्रविष्टियां बनायेगा! नक्शा: ActiveSupport :: हैशविथ इंडिफरफर सही डेटा के बजाय एक्सेस करें। मैं हैश को एक स्ट्रिंग के रूप में उत्पन्न कर रहा हूं और फिर eval का उपयोग करके हैश में परिवर्तित कर रहा हूं। यह आवश्यकतानुसार एक हैश बनाया। लेकिन मैं हैश को वापस पैराम्स हैश में डाल रहा था, इसलिए मैं नियंत्रक में update_attributes का उपयोग कर सकता था जो इसे हैशविंड इंडिफेंडरएप में परिवर्तित कर रहा था, जिससे समस्या

संबंधित मुद्दे