Ruby on Rails: как перенести изменения, внесенные в модели?
в приложении Rails, как я могу перенести изменения, которые я делаю в моделях? Например, я знаю, что если я создам модель с командой "rails g model Person name:string", также будет создана миграция. Однако, если после этого шага я перейду к созданной модели "Person" и добавлю новый атрибут, будет ли этот новый атрибут автоматически добавлен в миграцию для последующего сохранения в базе данных? Или я смотрю на это с той стороны, и атрибут должен быть добавлен к миграции, и затем добавляется к модели?
в отношении
3 ответов
вы не можете действительно "добавить" атрибут к модели, вы делаете это, создавая файл миграции и запуская его-Rails выясняет, какие атрибуты модель имеет на основе того, какие столбцы находятся в базе данных. Тем не менее, вы do необходимо добавить строку в модель для белого списка атрибута, если вы хотите иметь возможность обновлять его с помощью массового назначения. Вот почему вы часто увидите такую строку в моделях activerecord:
attr_accessible :name
но это необязательно и не важно для добавление атрибута.
чтобы добавить новый атрибут в модель, сначала создайте миграцию с помощью:
rails g migration AddAddressToPerson address:string
это создаст файл миграции в каталоге db/migration/. (Форма "AddXXXToYYY" и "RemoveXXXFromYYY" понимаются rails как "добавить (или удалить) новый столбец в модель XXX", см. документация для деталей). В этом случае я добавил атрибут с именем address
который является строкой, но вы можете изменить это на все, что ты захочешь.
затем, чтобы фактически обновить базу данных, вам нужно запустить миграцию с rake
:
rake db:migrate
наконец, если вы хотите разрешить массовое назначение этого атрибута, добавьте атрибут в свой список аргументов в attr_accessible
:
attr_accessible :name, :address
это должно сделать это.
Если вы добавляете новый атрибут с attr_accessor, вам не нужно будет ничего делать с миграциями, но ваши изменения не будут храниться в базе данных.
Если вы хотите сохранить свои изменения, вам нужно будет добавить атрибут в свою модель с помощью миграция. Вы можете просто создать текстовый файл с правильной структурой, миграции не являются чем-то необычным, но это намного проще генерировать, как это rails generate migration AddLastNameFieldToUsers
. Содержание такого файл может быть настроен следующим образом:
class AddLastNameFieldToUsers< ActiveRecord::Migration
def change
add_column :users, :last_name, :string
end
end
вам не нужно добавлять атрибуты непосредственно к модели. Rails (фактически ActiveRecord) выводит его автоматически. Для списка атрибутов класса model AR ищет таблицу с множественной формой имени модели (если модель-Order, то она будет искать атрибуты в таблице orders). Это часть функции проектирования, называемой Coc-Convention над конфигурацией.
таким образом, если вам нужно добавить атрибут, вам нужно создать миграцию, чтобы добавить это поле в столбец, как указано в других ответах.