2010-07-25 3 views
1

Нужно ли переназначать, когда я меняю модели в Rails? Может ли кто-нибудь сказать мне, что такое миграция? Я читаю его, и меня несколько смущает разница между материалом внутри db/migrate и материалом внутри приложения/моделей.Вопрос с Easy Rails: модель и миграция

Например, если я добавлю has_one realtionhip внутри своей модели, нужно ли мне переназначить это? Зачем?

ответ

5

Если ваша база данных изменена, используйте миграцию. Если вы просто добавляете методы в свою модель, не нужно переносить их.

Пример:

Мы начинаем и мы просто first_name, last_name. Мы хотим, чтобы сохранить их в базе данных, поэтому мы имеем миграцию, которая делает:

/app/models/human.rb

# empty 

/db/migrate/xxxxx.rb

add_column :humans, :first_name, :string 
add_column :humans, :last_name, :string 

Тогда мы поженимся, поэтому мы хотим, чтобы отслеживать, что

/app/models/human.rb

belongs_to :spouse 
  • Мы должны иметь spouse_id поле в базе данных, поэтому нам нужна миграция

/db/migrate/xxxxx.rb

add_column :humans, :spouse_id, :integer 
  • тогда у нас есть ребенок. ... На самом деле, мы все были детьми в какой-то момент, но чтобы это было просто, у нас будут люди и их потомки

/app/models/offspring.rb

belongs_to :human 

/db/migrate/xxxxx.rb

create_table ... 
  • Однако, нет необходимости добавлять что-либо к человеческой миграции, так как таблицы не изменить здесь. Нам нужно добавить:

/app/models/human.rb

has_many :offspring 
  • Если вы хотите быть в состоянии получить в, легко, ваш первенец, вы бы просто добавить метод вашей модели. Нет необходимости миграции здесь:

/app/models/human.rb

def first_born 
    offspring.first 
end 
+0

, что было очень полезно Джесси. Большое спасибо за Ваш ответ. – denniss

Смежные вопросы