Если я создаю новый рельс 3 миграции с (например)
rails g migration tester title:tester user:references
все работает нормально ... однако, если я добавлю столбец с чем-то вроде:
rails g migration add_user_to_tester user:references
поле ссылки не распознано. Короче говоря, вопрос заключается в следующем: как добавить ссылочный столбец для миграции rails из командной строки?
ruby-on-rails
activerecord
migration
планктон
источник
источник
РЕДАКТИРОВАТЬ : Это устаревший ответ и не должны применяться для Rails 4.x +
Вам не нужно добавлять ссылки, когда вы можете использовать целочисленный идентификатор для вашего ссылочного класса.
Я бы сказал, что преимущество использования ссылок вместо простого целого числа состоит в том, что модель будет предопределена с помощью own_to, и, поскольку модель уже создана и не будет затронута при переносе чего-либо существующего, цель как бы потеряна.
Так что я бы сделал так вместо этого:
А затем вручную добавьте принадлежащего пользователя в модель тестера.
источник
Обратите внимание, что вам, скорее всего, понадобится индекс для этого столбца.
источник
user.testers
вы можете опустить индекс.rails g migration ...
Генерироваться ,add_reference :installs, :device, index: true
который также создает индекс.С двумя предыдущими шагами, указанными выше, вы все еще пропускаете ограничение внешнего ключа. Это должно работать:
источник
Вы можете использовать ссылки в миграции изменений. Это действительный код Rails 3.2.13:
cf: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
источник
down
метода я получилActiveRecord::IrreversibleMigration
при откате с помощью Rails 3.2. Я также должен был изменитьсяchange
наup
.Запуск
rails g migration AddUserRefToSponsors user:references
создаст следующую миграцию:источник
При добавлении столбца вы должны сделать этот столбец целым числом и, если возможно, придерживаться соглашений по рельсам. Так что для вашего случая я предполагаю, что у вас уже есть модели Tester и User, а также таблицы тестеров и пользователей.
Чтобы добавить внешний ключ, вам нужно создать целочисленный столбец с именем user_id (соглашение):
Затем добавьте own_to к модели тестера:
И вы также можете добавить индекс для внешнего ключа (это то, что ссылки уже сделали для вас):
источник
Это сделает свое дело:
источник
Вы можете добавить ссылки на вашу модель через командную строку следующим образом:
Это сгенерирует файл миграции, такой как:
Это прекрасно работает каждый раз, когда я использую это ..
источник
Для рельсов 4
Генератор принимает тип столбца в качестве ссылки (также доступен как
belongs_to
).Эта миграция создаст
user_id
столбец и соответствующий индекс:генерирует:
http://guides.rubyonrails.org/active_record_migrations.html#creating-a-standalone-migration
Для Rails 3
Помощник называется ссылками (также доступны как
belongs_to
).Эта миграция создаст
category_id
столбец соответствующего типа. Обратите внимание, что вы передаете имя модели, а не имя столбца. Active Record добавляет_id
для вас.Если у вас есть полиморфные
belongs_to
ассоциации, то ссылки добавят оба обязательных столбца:Добавит столбец attachment_id и строковый
attachment_type
столбец со значением по умолчаниюPhoto
.http://guides.rubyonrails.org/v3.2.21/migrations.html#creating-a-standalone-migration
источник