2012-04-23 6 views
7

मेरे पास एक कॉलम है जिसमें पाठ प्रकार है। इसमें एक छोटी सी स्ट्रिंग है कि एक सरणीरेल: कैसे संभालें "विशेषता को एक ऐरे माना जाता था, लेकिन एक स्ट्रिंग" त्रुटि थी?

serialize :image_urls, Array 

बार कर रहे हैं जब एसक्यूएल सिर्फ डेटा सम्मिलित करने के लिए तेजी से होता है के रूप में श्रृंखलाबद्ध किया जाना चाहिए है।

Attribute was supposed to be a Array, but was a String 
: जब यह मामला है, मैं डालने एक स्ट्रिंग

["image1.jpg", "image2.jpg"] 

के रूप में जब से मैं एक स्ट्रिंग डालने कर रहा हूँ मेरी रेल ऐप्लिकेशन क्रैश जब यह डेटा को पढ़ने की कोशिश करता है, निम्न त्रुटि संदेश के साथ क्या

क्या इस त्रुटि को फेंकने या इसे पकड़ने और डेटा को परिवर्तित करने का कोई तरीका नहीं है?

मेरा मतलब है कि स्ट्रिंग को सरणी में कनवर्ट करना सिर्फ एक साधारण कॉल है, इसलिए, यह आसान होना चाहिए। मुझे नहीं पता कि यह कहां है, या इसे कैसे पूरा किया जाए।


मैं ऑब्जेक्ट_from_yaml overriding सोचने की तरह, लेकिन मुझे यकीन नहीं है कि यह काम कहां करें।
क्या मैं सही रास्ते में हूं?

उत्तर

5

fine manual से:

serialize(attr_name, class_name = Object)
[...] क्रमबद्धता YAML के माध्यम से किया जाता है।

तो कॉलम आपके image_urls के YAMLized संस्करण को शामिल करना चाहिए लेकिन '["image1.jpg", "image2.jpg"]' एक YAML सरणी नहीं है। यदि आप कच्चे क्रमबद्ध डेटा के साथ चारों ओर घूमना चाहते हैं तो आपको

["image1.jpg", "image2.jpg"].to_yaml 
# ---------------------------^^^^^^^ 

स्ट्रिंग उत्पन्न करने के लिए कुछ उपयोग करना चाहिए।

या बेहतर, serialize का उपयोग एक अलग तालिका के पक्ष में पूरी तरह बंद करना बंद करें।

+0

डेटा सामान्य करने के लिए बहुत जटिल है .. या अच्छी तरह से यह सही दर्द होगा, क्योंकि मुझे दर्जनों वास्तव में छोटी टेबल मिलनी होंगी (यह उदाहरण एक फ़ील्ड के साथ है, लेकिन तालिका में काफी कुछ हैं) – baash05

+0

क्या त्रुटि को फेंकने वाले फ़ंक्शन को ओवरराइड करने का कोई तरीका है? – baash05

+0

@ डेव: अपने डेटाबेस में डेटा को ठीक करें: आपने इसे तोड़ दिया, आपने इसे खरीदा। –

2

रेल 4 यह मेरे लिए किसी भी .to_yaml के बिना काम में, बस image_urls: []

0

आप इस तरह की कोशिश कर सकते के रूप में मजबूत पैरामीटर में जोड़ा: {: serialized_attribute_name => []}। और उचित पैरामीटर के रूप में उचित नियंत्रक में इसे जोड़ने के लिए मत भूलना। यह मेरी मदद करता है जब मैं एक ही समस्या से पीड़ित था।

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