Mam model Użytkownicy, który potrzebuje :email
kolumny (zapomniałem dodać tę kolumnę podczas początkowego rusztowania).
Otworzyłem plik migracji i dodałem t.string :email
, zrobiłem rake db:migrate
i dostałem NoMethodError
. Potem dodałem linię
add_column :users, :email, :string
znowu rake db:migrate
, znowu NoMethodError
. Czy brakuje mi tutaj kroku?
Edycja: oto plik migracji.
class CreateUsers < ActiveRecord::Migration
def self.up
add_column :users, :email, :string
create_table :users do |t|
t.string :username
t.string :email
t.string :crypted_password
t.string :password_salt
t.string :persistence_token
t.timestamps
end
end
def self.down
drop_table :users
end
end
add_email_to_users
i NIEadd_email_to_user
?rails db:migrate
do ostatniego kroku.t.string :column_x, limit: 10, after: :column_y
( np. dla Rails 4)Użyj tego polecenia w konsoli szyn
i
aby uruchomić tę migrację
źródło
Czasami
rails generate migration add_email_to_users email:string
powoduje taką migracjęW takim przypadku trzeba ręcznie
add_column
dochange
:A potem biegnij
rake db:migrate
źródło
rails generate migration add_email_to_users email:string
to być uruchamiane zabundle exec rails c
terminalem czy tylko w nim? 2) Gdzie jest generowany plik umieszczony po wykonaniu zapytania?Możesz też zrobić
jeśli nie dodałeś żadnych danych do tabel. Następnie edytuj plik migracji, dodając do niego kolumnę e-mail, a następnie zadzwoń
Działa to, jeśli w systemie są zainstalowane szyny 3.1.
Znacznie prostszym sposobem na to jest zmiana, niech zmiana w pliku migracji będzie taka, jaka jest. posługiwać się
Spowoduje to wycofanie ostatniej migracji i migrację.
źródło
Aby dodać kolumnę, musiałem wykonać następujące kroki:
rails generate migration add_fieldname_to_tablename fieldname:string
Alternatywny
rails generate migration addFieldnameToTablename
Po wygenerowaniu migracji edytuj migrację i zdefiniuj wszystkie atrybuty, które ma mieć dodana kolumna.
Uwaga : Nazwy tabel w szynach są zawsze w liczbie mnogiej (w celu dopasowania do konwencji DB). Przykład przy użyciu jednego z kroków wymienionych wcześniej-
rails generate migration addEmailToUsers
rake db:migrate
Lub
db/schema.rb
, Dodaj kolumny, które chcesz w zapytaniu SQL.Uruchom to polecenie:
rake db:schema:load
Ostrzeżenie / Uwaga
Pamiętaj, że uruchamianie
rake db:schema:load
automatycznie usuwa wszystkie dane z twoich tabel.źródło
Kiedy to zrobiłem, zamiast majstrować przy oryginalnej migracji, tworzę nową z dodaną kolumną w górnej części i kolumną upuszczającą w dolnej części.
Możesz zmienić oryginał i uruchomić go ponownie, jeśli przeprowadzasz migrację pomiędzy, ale w tym przypadku myślę, że migracja nie działa poprawnie.
W tej chwili dodajesz kolumnę, a następnie tworzysz tabelę.
Jeśli zmienisz kolejność, może to działać. Lub, gdy modyfikujesz istniejącą migrację, po prostu dodaj ją do tabeli tworzenia zamiast oddzielnej kolumny dodawania.
źródło
Możesz również wymusić na tabelach kolumny w tabeli za pomocą
force: true
, jeśli tabela już istnieje.przykład :
źródło
Możesz również użyć specjalnej metody change_table w migracji, aby dodać nowe kolumny:
źródło
Możesz cofnąć ostatnią migrację o
lub przywróć tę konkretną migrację o
i edytuj plik, a następnie uruchom
rake db:mirgate
ponownie.źródło
Możesz to również zrobić .. szyny g migracja add_column_to_users email: string
następnie rake db: migruj również dodaj atrybut: email w kontrolerze użytkownika;
po więcej szczegółów sprawdź http://guides.rubyonrails.org/active_record_migrations.html
źródło
Możesz także dodać kolumnę do określonej pozycji za pomocą przed kolumną lub po kolumnie, np .:
Plik migracji wygeneruje następujący kod, z wyjątkiem:: e-mail. musisz dodać po:: email lub przed:: email
źródło