2010-03-25 5 views
0

기존 레일 사이트에서 유지 보수 작업을하고 있으며 이상한 버그가 발생했습니다. 여기 몇 가지 모델이 있습니다 : Registrations, Business CategoriesServices. Registrations HABTM Business CategoriesServices, 이들 각각은 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에 왜 문제가없는 것 같아요?

감사합니다. 확인란을 선택하지 않으면 저스틴

답변

0

는, 브라우저는 다시 해당 필드 아무것도 보내지 않습니다. 레일즈는 체크 박스와 같은 이름의 숨겨진 필드를 포함시킴으로써이 문제를 해결합니다. 그런 다음 Rails는 숨겨진 필드를 단독으로 가져 오거나 (상자를 선택 취소) 또는 두 필드 모두를 선택합니다. 잡담은 체크 박스 필드 배열에 대해서는 작동하지 않는다는 것입니다. 나는 HAML이 아니지만, 이것이 문제라고 생각한다. 체크 박스가 선택되어 있지 않다면 params 해시에 :registration 키가 없으므로 아무 것도 업데이트되지 않는다.

the API ref을 참조하십시오.

+0

나는 당신이 죽었다고 생각합니다. 그 일을 해결하기위한 아이디어가 있습니까? – justinbach

+0

해시에 등록 키가 있는지 테스트하고, 해시에 등록 키가 없는지 확인하려면 선택하지 않은 항목을 수행하십시오. – Fred

+0

감사합니다, 프레드 - 그게 내가 한 일이고 완벽하게 작동합니다! – justinbach

관련 문제