Add_column для ссылок (Rails)
У меня есть следующая миграция Rails, которая отлично работает (неактуальные фрагменты удалены):
create_table :comments do |t|
t.text :body
t.references :post
end
Теперь я хотел бы добавить столбец author
в мою таблицу comments
(которая является идентификатором пользователя), но я понятия не имею, как это сделать (у меня возникает соблазн просто написать MySql -специфический синтаксис с использованием execute
).
Я смотрел на add_column здесь, который не упоминает references
. Я действительно нашел TableDefinition # ссылки, но я понятия не имею, как использовать его с инструкцией add_column
.
Возможно ли это? Также верно ли, что для MySql функциональность "ссылок" фактически не устанавливает отношения между таблицами?
Ответы
Ответ 1
Пока слишком поздно, чтобы получить какие-то очки из этого, я думал, что поставил бы лучший способ для потомков:)
используйте change_table
вместо create_table
, чтобы добавить столбцы в таблицу, которая уже существует, со всеми преимуществами TableDefinition:
self.up do
change_table :comments do |t|
t.references :author
end
end
Это может показаться тривиальным, но другие драгоценные камни, такие как Devise, сильно используют свои собственные пользовательские определения таблиц, и таким образом вы все еще можете их использовать.
Ответ 2
add_reference :table_name, :reference, index: true
Ответ 3
Наконец-то он получил
add_column :locations, :state_id , :integer, :references => "states"
Ответ 4
Во-первых, do:
script/generate migration AddAuthorIdToComments
Откройте сгенерированный файл и добавьте эту строку:
add_column :comments, :author_id, :integer
Затем в ваших файлах модели:
class User < ActiveRecord::Base
has_many :comments, :foreign_key => "author_id"
end
class Comment
belongs_to :author, :class_name => User
end
Ответ 5
Прошло некоторое время с тех пор, как я посмотрел на это, но последний раз, когда я проверял миграцию, не поддерживал создание внешних ключей. К счастью, однако, есть плагин для него. Я использовал это, и он работает хорошо.
Ответ 6
Вы можете добавить столбец add_column(:table, :column_name, :type, :options)
в новую миграцию.