Подтвердить что ты не робот

PG:: StringDataRightTruncation: ОШИБКА: ограничение строки PostgreSQL (255) | Heroku

У меня есть Listings controller, и пользователи могут добавить описание. Если описание длинное, что должно быть, я получаю эту ошибку в Heroku:

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

Как я могу это исправить?

Edit

Я узнал (Джон сказал также), что мне нужно изменить в моей строке таблицы (которая имеет предел): текст безграничен. Но только изменение таблицы в миграции, похоже, не сработало.

Моя измененная миграция объявлений

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

  t.timestamps
end
end
end

Но я все еще получаю проблемы с Героку →

    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
4b9b3361

Ответ 1

Казалось бы, если указать этот столбец как: text type, а не a: string, исправить эту проблему.

Ответ 2

Не редактируйте предыдущие миграции. Никогда не делайте этого, как правило. Вместо этого вы создадите новую миграцию, которая приведет к изменению (и позволит вам при необходимости откатить).

Сначала создайте миграцию:

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.)

Ответ 3

Указанный ввод слишком длинный для поля string, поэтому просто измените на поле text:

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

Затем запустите rake db:migrate