RoR - чужие ключи, созданные с помощью ассоциаций и переноса или «вручную» (или эшафот)? - PullRequest
3 голосов
/ 13 апреля 2011

Просто начинаю изучать Ruby on Rails.Я использую RoR 3. Я прочитал это: http://guides.rubyonrails.org/association_basics.html

Но я хочу убедиться, что я полностью понимаю.

При создании новой модели (я делаю через скаффолд длясейчас), я должен указать поля foreign_key в этой точке, или ассоциация обрабатывает это полностью?Я считаю, что связь только на уровне приложения, а не на уровне базы данных, верно?

Так что я думаю, что я должен сделать:

rails generate scaffold post body:text title:string user_id:integer

Итак, в итоге, при создании приложения блога,я должен указать поле user_id в пост-модели, или has_many :posts пользовательской модели позаботится о фактическом добавлении этого в базу данных (у меня mysql) при миграции?

И если ответ таков, что я должен сделать это, когда я сначала создаю модель (с помощью скаффолда или вручную), что произойдет, когда я решу позже, что я хочу добавить внешний ключ, долженЯ добавляю это как оператор execute в новой миграции?

1 Ответ

5 голосов
/ 13 апреля 2011

Ты прав. Вам нужно указать внешний ключ, когда вы создаете свой скаффолд / модель / миграцию, как вы заявили, чтобы получить правильную БД, а has_many позаботится о модели за вас.

Итак, для первоначального создания лесов (или модели), просто выполните:

rails generate scaffold post body:text title:string user_id:integer

, как вы заявили, и добавьте has_many для самой модели.

Для дополнений позже вы должны создать новую миграцию, что-то вроде (при условии, что вы хотите использовать генерацию, но вы можете написать свою собственную миграцию):

rails generate migration add_user_id_to_posts user_id:integer

С этим вы можете запустить rake db:migrate, а затем обновить вашу модель с has_many или любой другой ассоциацией, которая вам нужна.

...