textを使用する必要があります 長さ制限のない文字列が必要な場合は、Railsを使用します。このような移行:
def up
change_column :your_table, :your_column, :text
end
def down
# This might cause trouble if you have strings longer
# than 255 characters.
change_column :your_table, :your_column, :string
end
物事を整理する必要があります。 :null => falseが必要な場合があります またはその最後にある他のオプションもあります。
stringを使用する場合 明示的な制限のない列の場合、Railsは暗黙的な:limit => 255を追加します 。ただし、 textを使用する場合 、データベースがサポートする任意の長さの文字列タイプを取得します。 PostgreSQLでは、 varcharを使用できます 長さのない列ですが、ほとんどのデータベースはそのために別のタイプを使用し、Railsは varcharについて認識していません 長さなし。 textを使用する必要があります Railsでtextを取得します PostgreSQLの列。タイプtextの列間でPostgreSQLに違いはありません タイプvarcharの1つ (ただし、 varchar(n) は 違う)。さらに、PostgreSQLの上にデプロイする場合は、:stringを使用する理由はありません。 (別名 varchar )まったく、データベースは textを扱います およびvarchar(n) varchar(n)の余分な長さの制約を除いて、内部的に同じです。; varchar(n)のみを使用する必要があります (別名:string )列サイズに外部制約(フォーム897 / Bのフィールド432は23文字の長さになるという政府のフォームなど)がある場合。
余談ですが、 stringを使用している場合 列はどこでも、常に:limitを指定する必要があります 制限があることを思い出してください。制限を超えないように、モデルで検証を行う必要があります。制限を超えると、PostgreSQLは文句を言って例外を発生させ、MySQLは文字列を静かに切り捨てるか文句を言います(サーバー構成によって異なります)、SQLiteはそのまま通過させ、他のデータベースは他のことを行います(おそらく文句を言います) 。
また、同じデータベース(通常、HerokuではPostgreSQL)上で開発、テスト、およびデプロイする必要があります。同じバージョンのデータベースサーバーを使用する必要もあります。データベース間には、ActiveRecordがユーザーを隔離しない他の違い(GROUP BYの動作など)があります。あなたはすでにこれをしているかもしれませんが、とにかくそれについて言及したいと思いました。
更新 :ActiveRecordの新しいバージョンは varcharを理解します 制限がないので、少なくともPostgreSQLでは、次のように言うことができます。
change_column :your_table, :your_column, :string, limit: nil
varchar(n)を変更するには varcharへの列 。 テキストコード> およびvarchar PostgreSQLに関する限り、これは同じことですが、一部のフォームビルダーはそれらを異なる方法で処理します: varchar を取得します 一方、 text 複数行のを取得します 。