Все миграции - это изменение базы данных. Rails обрабатывает синхронизацию между моделью и базой данных.
Вы можете иметь User
таблицу, которая имеет id
, firs_name
и модель класса может выглядеть следующим образом
class User < ActiveRecord::Base
end
Как вы можете видеть класс модели пуст, и вы можете все еще довольно много методов доступа по этому классу например:
@user = User.new
@user.first_name = "Leo"
@user.save!
и он будет знать, что с ним делать.
Миграции - это всего лишь файлы, которые позволяют вам изменять базу данных поэтапно, сохраняя правильное управление версиями в схеме базы данных.
Конечно, Rails будет жаловаться, если вы попытаетесь вызвать вещи из вашей модели, которых нет в базе данных, или родительский класс ActiveRecord::Base
.
@user = User.new
@user.awesome
#=> undefined method `awesome` for #<User:some_object_id>
Что касается миграций, вы можете иметь несколько миграций, которые влияют на одну таблицу. Ваша задача - узнать только, какие атрибуты вы добавили в модель. Rails сделает все остальное за вас.
Что вы имеете в виду 'модели и миграции в sync'? Вы должны добавить новую миграцию и начать использовать новые атрибуты на своей модели, а не продолжать редактирование существующей миграции (ну, иногда, но хорошо ...) – fotanus
Мое замешательство частично связано с тем, что использование эшафота для генерации ресурс добавляет attr_accessible к модели. Я был удивлен, что создание переноса для добавления нового поля не обновляло модель. –
'attr_accessible' - это белый список массовых заданий. Представьте себе, если Rails автоматически обновит это для вас, когда вы добавили что-то вроде 'admin' в схему! – mikeryz