Подтвердить что ты не робот

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 функциональность "ссылок" фактически не устанавливает отношения между таблицами?

4b9b3361

Ответ 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) в новую миграцию.