2012-11-17 5 views
2

사용자 설정을 0 또는 1 (true/false)으로 저장하는 모델이 있습니다. 내 코드에서, 나는이 작업을 수행하는 데 :레일스 정수를 부울로 평가

if @user.settings.show_menu == 1 
    # do this 
end 

은 어떻게 == 1 또는 == 0을 남길 수 있습니다? 나는 시도했다 :

if @user.settings.show_menu 
    # do this 
end 

그러나 그것은 긴 하루이었다 [email protected]_menu

를 사용하는 경우와 같은, 참으로 평가 아니에요, 올바른 방향으로 나를 인도 해주십시오. 감사!

+2

루비에서는'nil'과'false' 만 위장한 것으로 간주됩니다. 올바른 테스트는 실제로'== 0' 또는'== 1'을 검사하는 것입니다. –

+3

이주가 int 값이 아닌 boolean으로 예상되도록 정의 된 경우 Rails가 직접 처리해야합니다. –

+0

그리고 문제가 있습니다. 부울 XD로 열을 설정하지 않았습니다. 지금 바뀌면 팁 [ –

답변

4

레일에는 숫자로 저장하고 그에 따라 변환하는 데이터베이스와 함께 사용할 boolean 열이 있습니다. 일반적으로 이것은 데이터베이스에 SMALLINT으로 인코딩됩니다. 일반 INT을 가지고 있다면 언제든지 마이그레이션하여 변환 할 수 있습니다. 이 방법이 정의되어 있지 않은 경우,

if (@user.settings.show_menu?) 
    # ... 
end 

:

예 마이그레이션 : 귀하의 응용 프로그램 내에서

change_table :table_name do |t| 
    t.change(:boolean_column, :boolean) 
end 

는 표준 관행처럼, 자신의 ? 방법 버전 부울 플래그를 참조하는 것입니다 문제를 발견 할 수있는 예외가 생깁니다. 이것은 항상 사실로 평가되는 것과 비교하면 유리합니다.

관련 문제