2012-05-22 2 views
0

레일스 애플리케이션에서 부울 필드를 모델에 저장해야합니다. 자,이 문제는 Sqlite3 (개발 용으로 사용)이 진리 값으로 문자 상수 't''f'을 사용하기 때문에 발생합니다. 그러나 MySQL이 배포 될 애플 리케이션은 리터럴 truefalse을 사용합니다 (각각 tinyints 1과 0에 해당). 이것은레일의 부울 필드

select * from articles where published = true 

메시지 no such column: true으로 sqlite3를 실패 할

Article.where 'published = true' 

레일로 표현 된 형태의 발현되기 때문에, 문제가 SQL 조건을 사용한다.

레일즈에서 부울을 어댑터로 이식 할 수있는 가장 좋은 방법은 무엇입니까? 액티브 레코드를 사용

답변

1

, 당신은 당신은 아마 한 단계 더이 먹고 싶어 것

Article.where(:published => true) 

수행하고 그래서 컨트롤러에 그냥 갈 수있는이 범위

class Article < ActiveRecord::Base 
    scope :published, where(:published => true) 
end 

만들 것 여기 active_record의 쿼리 인터페이스에

@published_articles = Article.published 

더 많은 정보 : http://guides.rubyonrails.org/active_record_querying.html

는 또한 할당 작업 = 대신 평등 비교 ==

+0

감사를 사용! 나는 범위 시설을 알지 못했다. 다시 할당 :이 코드는 Ruby가 아니라 SQL을 사용하여 평등성 테스트에 사용됩니다. – jforberg