Дело в том, что у меня есть таблица со столбцом даты типа, но я просто использую год. Как изменить его на целочисленный тип, чтобы сохранить только год? Мне нужна миграция из трех шагов? И как мне сделать откат?Rails migration: изменить тип данных столбца с даты на целое
ответ
Я не согласен с другими плакатами: вы лучше хранить год как целое число, если это действительно информация, которую вы хотите захватить. Потому что, если вы этого не сделаете, и сохраните полную дату, вы фактически храните часть информации, представляющую собой искажение. I.e., он хранит день и месяц и, возможно, некоторые метаданные календаря. Каждый раз, когда вы его используете, вам нужно помнить об этом, и убедитесь, что любые вычисления - это то, что вы действительно хотите делать. I.e., есть много классов и библиотек Date и Time, все в использовании, все в Rails и Ruby.
Если вам нужен только год, а затем хранить только год. Чтобы достичь этого, я бы пошел легко и консервативно: выполните несколько простых миграций.
- Добавить колонку в новый год.
- Преобразование данных.
- Удалить столбец старого года.
Я согласен с некоторыми другими плакатами здесь, что вам, вероятно, лучше хранить его как значение даты и отображать только год. Для целей расчета, возможно, вы можете установить для всех значений даты в этом столбце значение 01-01-ГГГГ. Затем, когда вы хотите показать, что год на ваш взгляд, сделать:
#- my_date_value=Wed, 18 Sep 2013 19:21:11 UTC +00:00
my_date_value.year
=> 2013
т.е.
<%= my_date_value.year %>
Однако, если вы решили сделать это значение даты, то вы можете сделать миграцию вроде следующий, чтобы преобразовать его в год только целочисленное поле:
class ChangeThingDateToYear < ActiveRecord::Migration
def change
add_column :things, :my_year_value, :integer
# You need to tell ActiveRecord to refresh the object
MyDatedThings.reset_column_information
MyDatedThings.all.each do |r|
r.my_year_value = r.my_date_value.year
r.save!
end
remove_column :things, :my_date_value
# If you want to keep the same column name
rename_column :things, :my_year_value, :my_date_value
end
end
Спасибо, что указали свою точку зрения и код миграции. Очень полезно! Я на самом деле использую тип даты и работаю с частью года только, как вы сказали, поэтому я собираюсь попробовать другой подход. Благодарю. – hector
- 1. изменить тип столбца на целое рельсы
- 2. Изменить тип столбца базы данных в десятичной
- 3. Как изменить тип данных столбца в рельсах?
- 4. изменить тип данных столбца
- 5. Rails 4 - изменить тип данных столбца из двоичного на строку
- 6. Rails Migration Column Type Polymorphic
- 7. Rails: изменить тип столбца, но сохранить данные
- 8. Изменить тип данных столбца на последовательный
- 9. Изменить тип данных столбца на последовательный postgresql
- 10. Изменение столбца даты в целое
- 11. Как изменить тип столбца на интервал в моей миграции Rails?
- 12. Как изменить положение нового столбца в rails 3.x migration
- 13. Rails Migrations: попытался изменить тип столбца от строки до целого
- 14. C# Как изменить тип данных столбца Datagridview?
- 15. Rails migration generate
- 16. RAILS: DB MIGRATION: сброс столбца id в auto_increment
- 17. Как изменить значения столбца даты?
- 18. Rails migration for change column
- 19. Rails Change Column Type Migration для MySQL и Postgres
- 20. Проблема с Rails Migration
- 21. Rails DB Migration - разрешения
- 22. Как изменить тип данных столбца в sybaseIQ
- 23. Как мне изменить тип данных Rails на PostGres bigint?
- 24. SQL Server 2012 Как изменить тип данных столбца с бита на поле даты?
- 25. Изменить тип данных столбца в MonetDB
- 26. Изменить тип даты (Java)
- 27. Rails Migration Prepend Column?
- 28. Pandas: не удалось изменить тип данных столбца
- 29. изменить тип столбца на double в mysql
- 30. Rails 4 migration: как изменить порядок столбцов
Оставьте это как дату, но просто укажите год. Если вы не хотите беспокоиться о вводе месяцев или дней, используйте 1 января. –
Я согласен с @RobertHarvey, я бы оставил его, если он действительно все еще означает «год» даты. Вы могли бы сделать все за одну миграцию, если бы вы действительно хотели целое число, но откат не может напрямую восстановить информацию о месяце и день, которую вы выбрали. – lurker