Вам слід використовувати 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. Там немає ніякої різниці в PostgreSQL між стовпчиком типу text
і одного типу varchar
(але varchar(n)
це різні). Крім того, якщо ви розгортаєте поверх PostgreSQL, немає жодної причини використовувати :string
(AKAvarchar
) взагалі, база даних обробляє text
іvarchar(n)
внутрішньо те саме, за винятком додаткових обмежень довжини для varchar(n)
; ви повинні використовувати varchar(n)
(AKA :string
) лише у випадку, якщо у вас є зовнішнє обмеження (наприклад, урядова форма, яка говорить, що поле 432 у формі 897 / B буде мати 23 символи) щодо розміру стовпця.
Окрім того, якщо ви string
де-небудь використовуєте стовпець, ви завжди повинні вказувати це :limit
як нагадування собі про те, що існує обмеження, і ви повинні мати перевірку в моделі, щоб переконатися, що обмеження не перевищено. Якщо ви перевищите ліміт, PostgreSQL скаржиться та викличе виняток, MySQL тихо скоротить рядок або поскаржиться (залежно від конфігурації сервера), SQLite дозволить йому пройти як є, а інші бази даних будуть робити щось інше (можливо, скаржиться) .
Крім того, вам слід також розробляти, тестувати та розгортати поверх тієї самої бази даних (яка зазвичай буде PostgreSQL на Heroku), ви навіть повинні використовувати ті самі версії сервера баз даних. Між базами даних існують інші відмінності (наприклад, поведінка GROUP BY), від яких ActiveRecord не захистить вас. Можливо, ви вже робите це, але я думав, що все одно згадаю про це.