Как добавить простую ассоциацию has_many к модели в ruby ​​on rails?

Привет, я в значительной степени новичок в RoR, поэтому я застрял на чем-то таком простом последние три часа или около того.

Я последовал этому вопросу, который заставил меня поверить, что для добавления ассоциации я должен:

  • Создайте модель (rails generate model1)
  • Создайте вторую модель (rails generate model2)
  • Затем отредактируйте файлы model1.rb и model2.rb, указав в них has_many :model2s и belongs_to :model1 соответственно.
  • Запустить грабли db:migrate

Я думал, что это должно было создать модели, их соответствующие таблицы в базе данных и ссылку в таблице model2 для model1. Однако эта последняя часть не была сделана.

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

Благодарю вас!


person Saad Rehman Shah    schedule 10.08.2012    source источник


Ответы (2)


Вам необходимо предпринять следующие шаги. Если у вас есть две модели - родительская и дочерняя.

В родительской модели добавьте отношение has_many. В дочернем элементе добавьте отношение belongs_to.

Добавьте столбец в дочерний элемент для хранения ссылки:

rails g migration add_parent_id_to_child parent_id:integer
person ardochhigh    schedule 10.08.2012

В вашем файле миграции БД вам придется добавить внешний ключ вручную, если только вы не указали, что model2 имеет model1_id:integer при создании модели следующим образом:

rails generate model model2 model1_id:integer #Extra fields ...

Взгляните на документ здесь: http://guides.rubyonrails.org/command_line.html#rails-generate

person Anthony Alberto    schedule 10.08.2012
comment
Итак, вы говорите мне, что указания ассоциации в моделях недостаточно. Я должен четко указать, что у model2 есть столбец model1. Либо в команде генерации, либо в миграции создания? И это даже не упоминается явно в руководствах. - person Saad Rehman Shah; 10.08.2012
comment
Возможно, следуйте пошаговому руководству, которое покажет вам, как все делать, и вам будет проще начать: ruby. railstutorial.org - person Anthony Alberto; 10.08.2012
comment
Спасибо за правильный ответ. Но я пометил другой ответ как принятый, потому что он напрямую отвечает на заданный вопрос. Но именно вашего ответа было достаточно, чтобы разрешить мое замешательство. - person Saad Rehman Shah; 11.08.2012
comment
Привет, Кофеин, если тебе понравился ответ, пожалуйста, проголосуй за него. Ваше здоровье. - person ardochhigh; 26.10.2012