2016-03-06 4 views
2

Я хочу создать 2 модели, где один принадлежит другому. Я знаю команду generate для создания модели, которая «принадлежит» другому, но я не знаю, как иметь другую модель «has_one».Как сгенерировать модель с has_one contraint

Могу ли я указать «has_one» в команде generate? Или вручную добавить его в файл модели?

Это все еще меня смущает, так как ребенок, у которого «принадлежит_то», есть внешний ключ, а родитель, у которого «has_one» ничего нет.

И разве это не отношения «один к одному», и поэтому не нужно?

ответ

5

Для примера воспользуемся некоторыми конкретными условиями. Мы скажем, что у пользователя есть один профиль.

Для создания пользователя и профиль, вы можете использовать:

rails generate model User email:string username:string 
rails generate model Profile user:references about_me:text 

Так что да, вы должны добавить строку has_one :profile к пользовательской модели. Нет, вам не нужно добавлять строку модели belongs_to :user в модель профиля, так как она будет добавлена ​​для вас.

Что касается вашего последнего вопроса, я не уверен, что вы имеете в виду. Да, это отношения «один к одному», но какая часть, по вашему мнению, не нужна? Линия has_one :profile?

Если это та часть, которую вы не понимаете, вы не полностью понимаете, что дает вам эта линия. Он добавляет полезные методы в класс User, наиболее важными из которых являются, вероятно, @user.build_profile и @user.profile. Может показаться не очень, но довольно круто для добавления только одной строки кода imho.

+1

Теперь все имеет смысл, это позволяет обеим таблицам знать, что они имеют ссылку друг на друга только с одним, имеющим внешний ключ. Спасибо. Kinda отстой, что вы должны добавить has_one вручную. Есть ли способ добавить это в файл переноса? –

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