я могу легко создать леску или модели в Rails с полем, которое является ссылкой (внешний ключ) на другую модель:Можно добавить столбец в модель ActiveRecord, которая является внешним ключом?
rails g model Cat owner:references
rails g scaffold Cat owner:references
Но я не могу сделать то же самое для добавления столбца в миграция:
rails g migration AddOwnerToCats owner:references
Вышеприведенный делает производить миграцию файла, как это:
class AddOwnerToCats < ActiveRecord::Migration
def change
add_column :cats, :owner, :references
end
end
и когда я пытаюсь запустить его с rake db:migrate
, я получаю это:
SQLite3::SQLException: near "references": syntax error: ALTER TABLE "cats" ADD "owner" references
Так есть способ добавить столбец, который является ссылкой на другую модель? Или я просто должен сделать:
rails g migration AddOwnerToCats owner_id:integer
И затем перейти в миграции и добавить индекс для owner_id
?
Если вы видите шаблон генератора рельсов, вы можете увидеть, что он будет слепо принимать аргумент, который вы отправляете по вашим командам, поэтому, если вы отправляете рельсы g migration addOwnerToCats owner_id: your_name, он создаст файл миграции с вашим именем в качестве поля ... –
Я думаю, что 'ссылки' работают только в' create_table' или 'change_table'. Итак, да, просто сделайте 'add_column: cats,: owner_id,: integer', затем' add_index: cats,: owner_id' – j03w
@Rajarshi - я так полагал .. –