2013-07-29 43 views
17

私はListings controllerがあり、ユーザーは説明を追加できます。説明が長くなる必要がある場合、私はHerokuでこのエラーを受け取ります。PG :: StringDataRightTruncation:エラー:PostgreSQLの文字列(255)制限| Heroku

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:description、:limit => nil'ではなく' t.string'でなければなりません –

+0

まあ、私はまだヒロクのトラブルを受けています –

2

与えられた入力は、これだけtextフィールドに変更、stringフィールドの長すぎる:

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 

それはそれを行う必要があります。 (私は上下のメソッドを定義し、個別の代わりにのみ可逆移行で動作変更方法を使用して、そしてActiveRecordの:: IrreversibleMigration例外をスローし、データ型の変更をロールバックしようとしているので、変更の方法を使用して注意してください。)

関連する問題