Несколько недель назад у меня была возможность провести несколько дней между проектами, чтобы внести свой вклад в открытый исходный код. Я всегда хотел внести свой вклад в открытый исходный код, но не знал, с чего начать, войдя в мир разработки менее года назад. Время профессионального развития Viget дало мне возможность проверить что-то из моего списка, а также выучить новый навык. Я решил заглянуть в Rails Girls Summer of Code (RGSOC). RGSOC — это «глобальная программа стипендий для женщин и недвоичных программистов. Студенты получают трехмесячную стипендию для работы над существующими проектами с открытым исходным кодом и расширения набора навыков». Их сайт также с открытым исходным кодом, поэтому работа над сайтом с открытым исходным кодом, который поддерживает работу с открытым исходным кодом, была своего рода начальным. Это казалось отличным местом, чтобы промочить ноги в обществе.
Я изучал их проблемы с GitHub, чтобы найти что-то полезное и полезное для меня. Я нашел идеальную пару! В одном из наших клиентских проектов я немного работал с Rails accepts_nested_attributes_for
но не чувствовал, что у меня есть глубокое понимание того, как это работает. RGSOC хотел выделить их поле address
из модели User
в свою собственную модель с street
city
State
zip
страна
и др. Поля. Достаточно просто. Но форма пользователя
редактирования
поставила две интересные задачи: как обойти проверки модели PostalAddress
и как удалить ( уничтожить
) адрес .
Проблема 1: валидация.
Конечно, мы проводим некоторую перестройку серверной части, но мы не хотим, чтобы пользователь чувствовал, что этот атрибут обрабатывается иначе, чем другие атрибуты. Таким образом, страница редактирования профиля пользователя должна выглядеть одинаково. Нам понадобится немного магии Rails, чтобы сохранить почтовый адрес в отдельной таблице. Введите acceptpts_nested_attributes_for
. Добавление этого удобного метода класса в модель позволяет сохранять атрибуты в связанных записях через родительский объект. Это невероятно полезно при работе с вложенной формой. Нам также нужно будет передать флаг allow_destroy: true
. (Подробнее об этом позже.)
Для простоты мы будем предполагать, что у пользователя может быть только один адрес, связанный с его учетной записью. acceptpts_nested_attributes_for
не предполагает ничего об отношениях ассоциации.