[ruby] ActiveRecord 6에서 boolean 값이 바뀐 것 같다.

어제 오후에 습관처럼 gem update를 날리고 아무 생각없이 잠자리에 누워서 웹툰 알리미를 기다리고 있었는데, 분명 11시 이후부터 알림이 와야하는데, 아무런 알림도 오지 않았다.

코드를 보는데, 이상하게 where()에서 boolean 을 검색하지 못하고 있다.

>> Toon.where(code: 119874)
D, [2019-08-25T17:32:43.633800 #51336] DEBUG -- :   Toon Load (0.1ms)  SELECT "toons".* FROM "toons" WHERE "toons"."code" = ?  [["code", "119874"]]
=> #<ActiveRecord::Relation [#<Toon id: 3, code: "119874", publisher: "naver", toon_type: "webtoon", created_at: "2018-09-20 20:22:45", updated_at: "2019-08-25 17:19:03", frequently: true>]>

string이나 integer 는 저렇게 검색이 잘 되는데,

>> Toon.where(frequently: true) #=> #<ActiveRecord::Relation []>
D, [2019-08-25T03:39:54.848019 #34914] DEBUG -- :   Toon Load (0.2ms)  SELECT "toons".* FROM "toons" WHERE "toons"."frequently" = ?  [["frequently", 1]]

boolean 은 이렇게 검색이 안되고 있었다.

웹툰 알리미는 덴마 같은 만화는 3분 마다 검색하고, 나머지는 15분에 한번씩 검색하고 있는데, boolean 이 검색이 안되니 아무 만화도 못 가져오고 있던 것이었다. 새벽 5시 넘어서까지 문제를 찾아봤지만, 결국 해결 못했다.


오늘 오후에 다시 보기 시작했는데, 역시나 못 찾았다. 그러다 혹시나 싶어서 db viewer로 열어보니

active record 5에서 만든 boolean 필드는 t, f가 들어가는데

active record 6에서 만든 boolean 은 0, 1로 사용하고 있었다…

기존 boolean 값을 강제로 0, 1로 바꾸고 나니 잘 동작한다. 원래 이런 건 큰 문제 없어야하는데, 이번에 rails 6나오면서 많이 바뀌었나 보다 ㅠㅠ


여전히 새로 추가되는 값은 검색이 되지 않아서 그냥 integer 타입으로 바꾸고 0, 1 값을 넣게 바꿨다.