17

私は持ってListings controllerおり、ユーザーは説明を追加できます。説明が長い場合、Heroku で次のエラーが表示されます。

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

どうすればこれを修正できますか?

編集

テーブルの文字列 (制限がある) を制限のない :text に変更する必要があることがわかりました (ジョンもそう言いました)。しかし、移行でテーブルを変更するだけではうまくいかないようでした。

私の編集済みリストの移行

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
4

3 に答える 3

21

列を :string ではなく :text 型として指定すると、この問題が解決するようです。

于 2013-07-29T09:23:12.983 に答える
11

以前の移行を編集しないでください。原則として絶対にしないでください。代わりに、変更を行う (必要に応じてロールバックできるようにする) 新しい移行を作成します。

まず、移行を生成します。

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

それはそれを行う必要があります。(変更メソッドを使用する代わりに、up メソッドと down メソッドを個別に定義したことに注意してください。これは、change メソッドを使用すると、可逆的な移行でのみ機能し、データ型の変更をロールバックしようとすると、ActiveRecord::IrreversibleMigration 例外がスローされるためです。)

于 2014-03-28T18:56:50.003 に答える
2

指定された入力はフィールドには長すぎるため、stringフィールドに変更してtextください:

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

次に実行しますrake db:migrate

于 2014-03-11T15:24:02.483 に答える