У меня есть модель Users, которая нуждается в :email
столбце (я забыл добавить этот столбец во время первоначального скаффолда).
Я открыл файл миграции и добавил t.string :email
, сделал rake db:migrate
и получил NoMethodError
. Затем я добавил строку
add_column :users, :email, :string
снова rake db:migrate
, снова NoMethodError
. Я пропустил шаг здесь?
Изменить: вот файл миграции.
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
и НЕadd_email_to_user
?rails db:migrate
для последнего шага.t.string :column_x, limit: 10, after: :column_y
( например, для Rails 4)Используйте эту команду в консоли rails
и
запустить эту миграцию
источник
Иногда
rails generate migration add_email_to_users email:string
производит миграцию, как этоВ этом случае вам придется вручную , то
add_column
дляchange
:А потом беги
rake db:migrate
источник
rails generate migration add_email_to_users email:string
это выполняться послеbundle exec rails c
или только внутри терминала? 2) Где находится сгенерированный файл после выполнения запроса?Вы также можете сделать
если вы не добавили никаких данных в таблицы. Затем отредактируйте файл миграции, добавив в него столбец электронной почты, а затем вызовите
Это будет работать, если в вашей системе установлены rails 3.1 и выше.
Гораздо более простой способ сделать это - изменить изменения, чтобы изменения в файле миграции были такими, какие они есть. использование
Это откатит последнюю миграцию и перенастроит ее снова.
источник
Чтобы добавить столбец, мне просто нужно было выполнить следующие шаги:
rails generate migration add_fieldname_to_tablename fieldname:string
альтернатива
rails generate migration addFieldnameToTablename
После того, как миграция сгенерирована, отредактируйте миграцию и определите все атрибуты, которые вы хотите добавить в этот столбец.
Примечание : имена таблиц в Rails всегда множественные (для соответствия соглашениям БД). Пример использования одного из шагов, упомянутых ранее
rails generate migration addEmailToUsers
rake db:migrate
Или
db/schema.rb
, добавив нужные столбцы в запросе SQL.Запустите эту команду:
rake db:schema:load
Предупреждение / Note
Имейте в виду, что при запуске
rake db:schema:load
автоматически стираются все данные в ваших таблицах.источник
Когда я это сделал, вместо того, чтобы возиться с исходной миграцией, я создаю новую, используя только столбец добавления в верхнем разделе и столбец удаления в нижнем разделе.
Вы можете изменить оригинал и повторно запустить его, если вы переходите между ними, но в этом случае я думаю, что это сделало миграцию, которая не будет работать должным образом.
В настоящее время вы добавляете столбец, а затем создаете таблицу.
Если вы измените порядок, это может сработать. Или, когда вы изменяете существующую миграцию, просто добавьте ее в таблицу создания, а не делайте отдельный столбец добавления.
источник
Вы также можете заставить столбцы таблицы в таблице, используя
force: true
, если ваша таблица уже существует.пример :
источник
Вы также можете использовать специальный метод change_table в миграции для добавления новых столбцов:
источник
Вы можете откатить последнюю миграцию с помощью
или откатить эту конкретную миграцию по
и отредактируйте файл, затем
rake db:mirgate
снова запустите .источник
Вы также можете сделать это .. rails gigration add_column_to_users email: строка
затем rake db: migrate также добавьте атрибут: email в ваш пользовательский контроллер;
для более подробной информации посетите http://guides.rubyonrails.org/active_record_migrations.html
источник
Вы также можете добавить столбец в определенную позицию, используя перед столбцом или после столбца, например:
Файл миграции сгенерирует следующий код, кроме как после: электронной почты. Вы должны добавить после:: электронная почта или до:: электронная почта
источник