Ruby에서 ..
연산자는 (1..5).to_a
처럼 시작과 끝을 포함하는 범위를 생성하며, ...
(exclusive range)와는 다릅니다. 이 범위 개념은 데이터베이스 쿼리를 포함한 다양한 Ruby 및 Rails 패턴에 통합되어 있습니다.
Rails 7부터 ..
연산자를 ActiveRecord 쿼리 내에서 직접 사용할 수 있습니다. 예를 들어, Slot
모델의 start_at
필드를 사용하여 현재로부터 30일 이내의 모든 슬롯을 찾을 때 Slot.where(start_at: ..cutoff)
와 같이 간결하게 표현할 수 있으며, 이는 SELECT * FROM slots WHERE start_at <= '...'
형태의 SQL 쿼리를 생성합니다.
또한, range = Time.current..30.days.from_now
와 같이 전체 범위를 정의한 후 Slot.where(start_at: range)
를 사용하면 SELECT * FROM slots WHERE start_at BETWEEN '...' AND '...'
형태의 SQL BETWEEN
절이 생성됩니다. 이는 Ruby의 표현력과 SQL 기능의 완벽한 결합을 보여줍니다.
이러한 범위 연산자를 사용하는 것은 전통적인 Slot.where('start_at <= ?', ...)
방식보다 여러 이점을 제공합니다. 코드가 간결하고 표현력이 풍부하며, Ruby의 관용적인 표현을 장려합니다. 또한, 코드의 의도를 명확히 하고 날짜 및 숫자 비교를 위한 상용구 코드를 줄여 개발 효율성을 증대시킵니다. 숫자 범위 예시로 Product.where(price: 10..50)
는 SELECT * FROM products WHERE price BETWEEN 10 AND 50
를 생성하며 코드의 간결성을 보여줍니다.