Я хочу создать migration
в Rails ссылку на другую таблицу. Обычно я делал что-то вроде:
add_column :post, :user, :references
Это создает столбец с именем user_id
в posts
таблице. Но что, если вместо этого user_id
я хочу что-то вроде author_id
? Как я могу это сделать?
schema_plus
gem,t.references :category, index: true, foreign_key: true, references: :match_categories
также работал у меня в файле миграции.Для Rails 5+
Исходное определение:
Если вы определяете вашу
Post
модель таблицы, вы можете установитьreferences
,index
иforeign_key
в одной строке:Существующее обновление:
Если вы добавляете ссылки в существующую таблицу, вы можете сделать это:
Примечание. Значение по умолчанию для
index
true.источник
null
s. Чтобы не допустить их, добавьте обычный вариантnull: false
.В Rails 4.2+ вы также можете установить внешние ключи в db, что является отличной идеей .
Для простых ассоциаций это можно сделать и при
t.references
добавленииforeign_key: true
, но в этом случае вам понадобятся две строки.источник
references: :users
опцияadd_reference
звонка. Я не вижу, чтобы это было задокументировано в документации, и, похоже, с моей стороны он работает без этого.В rails 4 при использовании postgresql и гема schema_plus вы можете просто написать
Это создаст столбец
author_id
, который правильно относится кusers(id)
.И в своей модели вы пишете
Обратите внимание, что при создании новой таблицы вы можете записать ее следующим образом:
источник
create_table
:t.references :author, references: :users
:references
действительно что-то делают.schema_plus
драгоценный камень целую вечность, и он фактически добавляет эту функциональность. Я соответствующим образом отредактировал свой ответ.t.references :col_name, references: other_table_name
работает без установки дополнительных гемов.Если вы не используете внешний ключ, то не имеет значения, каково фактическое имя другой таблицы.
Начиная с Rails 5 , если вы используете внешний ключ, вы можете указать имя другой таблицы в параметрах внешнего ключа. (см. https://github.com/rails/rails/issues/21563 для обсуждения)
До Rails 5 вы должны добавить внешний ключ как отдельный шаг:
источник
{to_table: :users}
alias_attribute (new_name, old_name) очень удобен. Просто создайте свою модель и отношения:
затем отредактируйте модель и добавьте псевдоним атрибута с
После этого вы сможете запускать такие вещи, как
источник