2008-09-24 2 views
7

내 레일 앱에 작업 목록과 같은 항목 목록이 있고 각 항목에 대해 매개 변수를 설정하는 두 개의 확인란이 있습니다.레일 MySql에 null 또는 0으로 저장되는 체크 박스

양식을 제출할 때 체크 박스는 0으로 저장되고 DB에는 0으로 저장되지 않습니다.

질문은 : 구성 방법이 있습니까? 데이터를 더 전통적인 0 또는 1에 저장하려면 null을 false로 저장하고 0을 true로 저장하는 것이 다소 혼란 스럽기 때문에 특별히 C 응용 프로그램과 같은 다른 응용 프로그램이 데이터를 읽어야 할 필요가 있습니다.

+0

실행중인 Rails 버전은 무엇입니까? –

답변

3

"당신은 club_ 회원입니까?"와 같이 작업중인 속성이 club_member이라고 가정 해 봅시다.

Ruby/Rails에서 현재 작동중인 방식으로 if model.club_member이 선택되지 않은 경우 값이 null이거나 Ruby에서 0 인 경우 false를 반환하고 값이 0이면 true를 반환합니다.

전반적으로 C 프로그램과 같은 다른 응용 프로그램을 데이터에 직접 두는 대신 응용 프로그램의 데이터를 외부 엔터티에 공개하는 Ruby/Rails API를 작성해야합니다. 이러한 방식으로 애플리케이션의 내부 구조를보다 잘 캡슐화 할 수 있으므로 이와 같은 것에 대해 걱정할 필요가 없습니다.

사용 : 그것은 말했다되는 모든 그러나


는, 여기 당신의 대답이다

value="1" 

... 당신의 체크 박스의 HTML 태그의 속성과 의 기본 값을 설정 부울 (사용자 마이그레이션에서) 0으로.

+0

감사합니다. 이 문제 (값 = 1 포함)를 해결하고 0으로 마이 그 레이션의 기본값을 설정합니다. – bcsanches

+0

나는 동일한 문제에 직면하지만 ExtJS 양식을 사용하고 있습니다. 내가 마이 그 레이션 파일에서 0과 값 : 1 확인란의 구성 요소에 기본값을 설정했는데 문제가 여전히 지속됩니다. extjs 어떤 아이디어? – Rashmi

+0

@Rashmi ExtJS에 익숙하지 않습니다. 두 개의 확인란을 설정하고 하나를 표시하고 다른 하나는 표시하지 않고 양식을 제출하는 것이 좋습니다. 컨트롤러에서 동작 시작 부분에'raise params.inspect'를 실행하면 폼에서 폼으로 전달되는 상황을 백 트레이스에서 정확하게 볼 수 있습니다. – Yardboy

2

이 잠재적 이유가 있습니다 :

  • 데이터베이스의 열은 "부울"는 마이그레이션 유형
  • 장소 부울 값
  • 사용에 대한 기본 있는지 확인 "check_box"가 아닌 "check_box_tag"
  • 레일스의 일부 버전에서는 생성 된 스캐 폴드에서 이러한 동작이 발생했습니다. 기본값을 고정으로 설정하는 것이 좋지만 기억이 안납니다.
+0

db의 열은 true로 설정되고 기본값은 false로 설정됩니다. null은 없어졌지만 이제 모든 값은 0입니다! 나는 다이나믹 돔을 사용하여 즉석에서 체크 박스를 만들고 있는데 이것은 아마도 문제 일 것이다. – bcsanches

+0

동적으로 사용하면 문제가되지 않을 수도 있습니다. 먼저 표준 Rails 헬퍼를 통해이를 수행 한 다음 DOM 조작에서 생성 된 HTML을 모방하는 것이 좋습니다. –

1

약 :

value.to_i.zero?

레일 문서에서
>> a=nil 
=> nil 
>> a.to_i.zero? 
=> true 
>> a=0 
=> 0 
>> a.to_i.zero? 
=> true 
>> a=3 
=> 3 
>> a.to_i.zero? 
=> false 
0

: 그것은 거짓 빈 또는 공백 문자열 인 경우

객체가 비어 있습니다. 예를 들어, "", "", nil, [] 및 {}는 비어 있습니다.

이렇게 간단 해집니다 : if! address.nil? & &! address.empty?

... to : if! address.blank?