2014-12-02 3 views
1

ARel을 사용하여 문자열 필드의 크기별로 레코드를 선택하는 방법이 있습니까? 예를 들어 사용자가 많은 경우 이름이 3 자 이하인 모든 사용자를 선택할 수 있습니까? 나는 어떤 불행하게도ARel 문자열 길이로 행 선택

User.where(User.arel_table[:firstname].length.lt(3) 
+0

지금은 arel에 그런 코드가 구현되어 있지 않은 것처럼 보입니다. 다음을 수행 할 수 있습니다. 1. 구현하기 위해 arel의 github 코드에서 문제를 엽니 다. 2. 직접 구현 한 다음 guthub에서 프로젝트 요청을 엽니 다. –

답변

1

처럼 뭔가를 할 수 있도록하고 싶습니다 문자열

User.where('LENGTH("users"."firstname") < 3') 

로 다음과 같은 작업을 수행 할 수 있습니다. 즉, Arel 기능을 사용하려고하는 이유는 데이터베이스 종속 SQL 기능을 피하는 것입니다 (예 : Postgres 및 Mysql의 날짜 처리 기능이 서로 다른 경우). 반면에 LENGTH()은 표준 SQL 함수이므로 해당 쿼리의 이식성에 문제가 없습니다.

tl; dr - 모든 것을 사용자 지정 SQL을 사용하는 것은 나쁜 습관입니다. 맞춤 SQL을 전략적으로 사용하는 것은 완전히 좋습니다.

+0

내 의도는 ARel에서 그것을 수행하는 것이 었습니다. 그래서 나는 또 다른 범위를 위해이를 무효화 할 수 있었고 논리를 한 번만 작성해야했습니다. 읽을 수 있고 이름을 지정하기 때문에 코드를 편집하는 사람이 반대 범위에 주목하고 둘 다 변경해야하기 때문에 지금은 문자열 조건을 사용하고 있습니다. – Aaron