2013-07-29 8 views
17

मेरे पास Listings controller है और उपयोगकर्ता विवरण जोड़ सकते हैं। यदि विवरण लंबा है, तो यह होना चाहिए, मुझे यह त्रुटि हेरोोकू में प्राप्त होती है:पीजी :: स्ट्रिंगडाटा राइट ट्रंकेशन: त्रुटि: पोस्टग्रेएसक्यूएल स्ट्रिंग (255) सीमा | हेरोकू

ActiveRecord::StatementInvalid (PG::StringDataRightTruncation: ERROR: 
value too long for type character varying(255) 

मैं इसे कैसे ठीक कर सकता हूं?

संपादित

मुझे पता चला (जॉन भी यह कहा) (जो एक सीमा होती है) करने के लिए अपने तालिका स्ट्रिंग में बदलने के लिए है कि मैं: पाठ जो असीम है। लेकिन माइग्रेशन में केवल तालिका को बदलना काम नहीं कर रहा था।

मेरा संपादित लिस्टिंग प्रवासन

class CreateListings < ActiveRecord::Migration 
def change 
create_table :listings do |t| 
    t.string :title 
    t.text :description, :limit => nil 

    t.timestamps 
end 
end 
end 

लेकिन मैं अभी भी Heroku मुसीबत हो रही है ->

2013-07-29T09:39:05.069692+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::StringDataRightTruncation: ERROR: value too long for type character v rying(255) 
2013-07-29T09:39:05.069870+00:00 app[web.1]: 
2013-07-29T09:39:05.069692+00:00 app[web.1]: : INSERT INTO "listings" ("created_at", "description", "image_content_type", "image_file_name", "image_fil _size", "image_updated_at", "price", "title", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id"): 
2013-07-29T09:39:05.069870+00:00 app[web.1]: app/controllers/listings_controller.rb:35:in `block in create' 
2013-07-29T09:39:05.069870+00:00 app[web.1]: app/controllers/listings_controller.rb:34:in `create' 
2013-07-29T09:39:05.069870+00:00 app[web.1]: 
2013-07-29T09:39:05.069860+00:00 heroku[router]: at=info method=POST path=/listings host=vaultx.herokuapp.com fwd="178.59.173.169" dyno=web.1 connect=3 s service=1882ms status=500 bytes=1266 

उत्तर

21

यह प्रतीत होता है कि एक के रूप में स्तंभ को निर्दिष्ट: पाठ के प्रकार और नहीं एक: स्ट्रिंग होगा इस समस्या को ठीक करें।

+0

हाँ सिर्फ फंड वह बाहर है लेकिन मुझे इसे काम करने में समस्याएं आ रही हैं। अगर मैं सिर्फ माइग्रेशन अपडेट करता हूं तो यह उसकेोकू पर काम नहीं करेगा। मैं अपना प्रश्न –

+0

संपादित करूँगा आपका माइग्रेशन 't.text होना चाहिए: विवरण,: सीमा => nil'' t.string' –

+0

ठीक है :(, मुझे अभी भी उसकीोकू परेशानी हो रही है। –

2

इनपुट दिया एक string क्षेत्र के लिए बहुत लंबा है, तो बस एक text क्षेत्र बदलें:

class ChangeListingsDescriptionTypeToText < ActiveRecord::Migration 
    def change 
    change_column :listings, :description, :text 
    end 
end 

फिर चलाने rake db:migrate

10

अपने पिछले माइग्रेशन संपादित न करें। नियम के रूप में ऐसा कभी न करें।

rails g migration change_datatype_on_TABLE_from_string_to_text 

तब उत्पन्न फ़ाइल को संपादित करें ताकि तरह दिखता है: इसके बजाय आप एक नया माइग्रेशन कि परिवर्तन कर देगा प्रवास बनाएंगे (और आवश्यकता होने पर आप रोलबैक करने के लिए अनुमति देते हैं।)

पहले, उत्पन्न माइग्रेशन

class ChangeDatatypeOnTableFromStringToText < ActiveRecord::Migration 
    def up 
    change_column :table_name, :column_name, :text, :limit => nil 
    end 

    def down 
    change_column :table_name, :column_name, :string 
    end 
end 

अब चलाएँ::

bundle exec rake db:migrate 
(तालिका और स्तंभ नाम के रूप में आवश्यक बदल)

ऐसा करना चाहिए। (ध्यान दें कि मैंने परिवर्तन विधि का उपयोग करने के बजाय व्यक्तिगत रूप से अप और डाउन विधियों को परिभाषित किया है क्योंकि परिवर्तन विधि का उपयोग केवल रिवर्सिबल माइग्रेशन के साथ काम करता है, और डेटाटाइप परिवर्तन रोलबैक करने का प्रयास करने से एक्टिव रेकॉर्ड :: अपरिवर्तनीय माइग्रेशन अपवाद फेंक देगा।)

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