기존 레일 사이트에서 유지 보수 작업을하고 있으며 이상한 버그가 발생했습니다. 여기 몇 가지 모델이 있습니다 : Registrations
, Business Categories
및 Services
. Registrations
HABTM Business Categories
및 Services
, 이들 각각은 HABTM Registrations
이다. 각 HABTM 관계에 대해 적절한 비 기본 키 조인 테이블이 존재합니다.레일 : HABTM 레코드가 적절하게 삭제되지 않았습니다.
사용자가 등록을 업데이트하기 위해 작성하는 두 개의 섹션 (비즈니스 카테고리 용과 서비스용)이있는 단일 양식이 있습니다. 두 섹션은 각각 여러 비즈니스 범주에 대해 하나씩, 각 서비스에 대해 하나씩 많은 체크 박스로 구성됩니다. 예를 들어, 다음과 같은 업종의 체크 박스를 생성하는 HAML은 : Registrations
컨트롤러의 업데이트 기능에서
- 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
:
일반적으로@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 ...
, 모든 것이 잘 작동합니다. 사용자는 원하는만큼 많은 확인란을 선택하여 등록 할 수 있으며 등록의 비즈니스 범주 및 서비스에는 확인란이 반영됩니다. 대부분의 경우 이후의 수정 작업이 가능합니다. 그러나 사용자가 양식의 주어진 부분 (비즈 카테고리 또는 서비스)의 모든 상자를 선택 취소 할 경우 양식의 해당 부분에 대한 변경 사항은 저장되지 않습니다. 오류 메시지가 없으며 "회사에서 성공적으로 업데이트되었습니다"라는 플래시가 계속 표시되지만 양식을 제출하기 전에 선택을 취소하더라도 상자는 계속 확인됩니다.
사이트를 재구성/리팩터링 했으므로 HABTM 대신 has_many :through
을 사용할 가능성이 높지만 예산으로는 충분하지 않습니다. HABTM에 왜 문제가없는 것 같아요?
감사합니다. 확인란을 선택하지 않으면 저스틴
나는 당신이 죽었다고 생각합니다. 그 일을 해결하기위한 아이디어가 있습니까? – justinbach
해시에 등록 키가 있는지 테스트하고, 해시에 등록 키가 없는지 확인하려면 선택하지 않은 항목을 수행하십시오. – Fred
감사합니다, 프레드 - 그게 내가 한 일이고 완벽하게 작동합니다! – justinbach