Я выполняю работы по техническому обслуживанию на существующем сайте rails и столкнулся со странной ошибкой. Здесь задействовано несколько разных моделей: Registrations
, Business Categories
и Services
. Registrations
HABTM Business Categories
и Services
, каждый из которых HABTM Registrations
. Соответствующие таблицы соединений без первичного ключа существуют для каждого из отношений HABTM.
Существует одна форма с двумя разделами (один для бизнес-категорий и один для услуг), которые пользователи заполняют для обновления своих регистраций. Каждый из двух разделов состоит из множества флажков, по одному для каждой потенциальной бизнес-категории и по одному для каждой услуги. Например, HAML, который генерирует флажки бизнес-категории, выглядит следующим образом:
- BusinessCategory.find(:all, :order => ['business_type']).each do |business_category|
%li
= check_box_tag "registration[business_category_ids][]", business_category.id, (@registration.business_categories.include?(business_category)) ? true : false
= business_category.business_type
В функции обновления контроллера Registrations
:
@registration = current_user.registration
if @registration.update_attributes(params[:registration])
flash[:notice] = "Company Successfully Updated."
redirect_to :action => 'edit_company'
else
... do appropriate error reporting and redirection ...
В общем все отлично работает. Пользователи могут зарегистрироваться с таким количеством или несколькими флажками, которые они хотят, и их бизнес-категории и службы регистрации отражают флажки. Последующие модификации также работают, по большей части. Однако, если в любой момент пользователи отменяют выбор всех полей в заданной части (категории или службы) формы, ни одно из изменений в этой части формы не сохраняется. Сообщения об ошибках отсутствуют, и по-прежнему отображается флеш-сообщение «Компания успешно обновлена», но флажки остаются установленными, даже если они не были проверены до отправки формы.
Если бы я перестраивал / реорганизовывал сайт, я бы с большей вероятностью использовал has_many :through
, а не HABTM, но наш бюджет не дает мне достаточно времени для этого. У кого-нибудь есть идеи о том, почему HABTM, похоже, испытывает проблемы с отпуском?
Спасибо за внимание!
Justin