#ruby-on-rails
#ruby-on-rails
Вопрос:
В моем приложении у меня есть модель пользователя и модель адреса. Как мне включить в адресную форму идентификатор пользователя id. (т. е. в моей адресной модели есть id и id_user)?
Ответ №1:
Ваша адресная модель должна содержать user_id
поле, а не id_user
field. Похоже, вы только начинаете работать с Rails, поэтому я бы рекомендовал прочитать официальные руководства по началу работы и основам объединения, чтобы изучить основы.
Ответ №2:
Вероятно, вы захотите изучить ассоциации записей. Я настоятельно рекомендую руководство по этому самому предмету на веб-сайте Rails.
Поскольку вы потратили время на создание двух отдельных моделей (одной для пользователей и одной для адресов) Я полагаю, это потому, что у вас может быть один или несколько адресов для каждого пользователя. Поэтому я бы рекомендовал использовать ассоциацию has_many
В вашем файле миграции для вашей адресной модели у вас должно быть имя столбца user_id
типа integer
. По соглашению rails будет использовать столбцы с именами model_id
для ассоциации с моделью. Итак, в вашем случае модель user
может быть связана с адресом через столбец user_id
.
Однако наличия столбца недостаточно. Вам также необходимо сообщить Rails об ассоциации в модели. Итак, добавьте следующее в начало вашей пользовательской модели (я бы предположил, app / model /user.rb)
has_many :addresses
Затем сообщите вашей адресной модели, что она принадлежит пользователю. Это опять же очень просто. Добавьте следующее в верхней части вашей адресной модели (app /model/address.rb)
belongs_to :user
Оттуда вы можете делать всевозможные замечательные вещи. Чтобы создать свои формы, вы можете захотеть просмотреть вложенные формы модели. В нем есть два Railscast, часть 1 и часть 2
Поскольку ваш опыт работы с Rails на данный момент кажется ограниченным. Я бы порекомендовал также ознакомиться с руководством по началу работы, посмотреть серию руководств от Envy Labs (с забавным названием Rails for Zombies), а когда вы приступите к работе, просмотрите Railscasts Райанса Бейтса