Dodaj kolumnę dla referencji (Rails)
Mam następującą migrację Rails, która działa idealnie (niepotrzebne kawałki usunięte):
create_table :comments do |t|
t.text :body
t.references :post
end
Teraz chciałbym dodać kolumnę author
do mojej tabeli comments
(która jest identyfikatorem użytkownika), ale nie mam pojęcia, jak to zrobić (kusi mnie, aby napisać składnię specyficzną dla MySql za pomocą execute
).
Szukałem add_column tutaj, które nie wspominają references
. Rzeczywiście znalazłem TableDefinition#references ale nie mam pojęcia jak tego użyć z add_column
oświadczenie.
6 answers
Chociaż jest już za późno, aby uzyskać jakiekolwiek punkty z tego, pomyślałem, że opublikuję najlepszy sposób dla potomności:)
Użyj change_table
zamiast create_table
, aby dodać kolumny do tabeli, która już istnieje, z całą dobrocią TableDefinition:
self.up do
change_table :comments do |t|
t.references :author
end
end
Może to wydawać się banalne, ale inne klejnoty, takie jak Devise, wykorzystują własne niestandardowe definicje tabel i w ten sposób nadal możesz ich używać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-15 18:21:39
add_reference :table_name, :reference, index: true
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-07 19:42:38
Finally got it
add_column :locations, :state_id , :integer, :references => "states"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 20:06:31
Najpierw zrób:
script/generate migration AddAuthorIdToComments
Otwórz wygenerowany plik i dodaj tę linię:
add_column :comments, :author_id, :integer
Następnie w plikach modelu:
class User < ActiveRecord::Base
has_many :comments, :foreign_key => "author_id"
end
class Comment
belongs_to :author, :class_name => User
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-12 22:01:38
Dawno na to nie patrzyłem, ale ostatnio sprawdzałem migracje nie obsługują tworzenia kluczy obcych. Na szczęście jednak jest do niego wtyczka . Używałem tego i działa dobrze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 22:43:39
Możesz dodać kolumnę przez add_column(:table, :column_name, :type, :options)
w nowej migracji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-14 08:15:25