add_column для ссылок (Rails) - PullRequest
60 голосов
/ 30 января 2009

У меня есть следующая миграция Rails, которая работает отлично (ненужные части удалены):

create_table :comments do |t|
  t.text :body
  t.references :post
end

Теперь я хотел бы добавить столбец author в мою таблицу comments (которая является идентификатором пользователя), но я понятия не имею, как это сделать (я испытываю желание просто написать MySql -специфический синтаксис с использованием execute).

Я смотрю на add_column здесь , в котором не упоминается references. Я на самом деле нашел TableDefinition # ссылки , но я не знаю, как использовать его с оператором add_column.

Возможно ли это? Кроме того, правда ли, что для MySql функциональность «ссылки» фактически не устанавливает связи между таблицами?

Ответы [ 6 ]

109 голосов
/ 15 октября 2010

Хотя уже слишком поздно, чтобы получить какие-либо очки из этого, я думал, что выложу лучший способ для потомков:)

используйте change_table вместо create_table для добавления столбцов в таблицу, которая уже существует, со всеми достоинствами TableDefinition:

self.up do
  change_table :comments do |t|
    t.references :author
  end
end

Это может показаться тривиальным, но другие гемы, такие как Devise, интенсивно используют свои собственные определения таблиц, и таким образом вы все равно можете их использовать.

78 голосов
/ 07 января 2014
add_reference :table_name, :reference, index: true
34 голосов
/ 21 апреля 2011

Наконец-то получил

add_column :locations, :state_id , :integer, :references => "states"
21 голосов
/ 30 января 2009

Сначала сделайте:

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
2 голосов
/ 30 января 2009

Прошло много времени с тех пор, как я посмотрел на это, но в последний раз я проверял, что миграции не поддерживают создание внешних ключей. К счастью, однако, есть плагин для него . Я использовал это, и это хорошо работает.

0 голосов
/ 30 января 2009

Вы можете добавить столбец на add_column(:table, :column_name, :type, :options) в новой миграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...