루비온레일즈 기본을 잊어버리면

1. Rails 의 changed?

레일즈에 얼마나 많은 기능이 있는걸까. 책 본지 너무 오래되었고, 쓰는 기능만 쓰기 때문에 벌어진 사건.

CSV 파일을 읽어서 SQL 테이블에 넣는 작업을 하는데, CSV 파일은 주기적으로 새 버전이 올라온다. 그러면 기존의 값들과 비교해서 바뀐 것이 있으면 관리자에게 알려주어야 한다는 요구사항이 있었다.

어느 레코드의 어느 필드가 바뀌었는지 확인하는 기능을 구현하는 것이, CSV 이 여러개이고, SQL테이블과 1:1 대응도 아니기 때문에 복잡해보였다. 이런 저런 안을 내고, 고민하고 코드를 만들었는데, 며칠을 헤맨뒤에야 ActiveRecord 의 changed? 메써드를 발견했다. 분명 예전에 입문서 읽을 때 감동했던 기능인데 까맣게 있고 있었다. (참고 DOC)

hotel = Hotel.find_by_name('좋은 호텔')
hotel.changed? # =3 false
hotel.name = '더 좋은 호텔'
hotel.changed? # => true
hotel.changed # => ['name']

바뀐 필드가 어느 녀석인지 그냥 알 수 있다.

2. Ruby 의 reverse

또 얼마전에는 “경도, 위도” 로 되어있는 문자열을 “위도, 경도”로 바꿔야 하는 상황이 있었다.

def to_latlng(longitude_latitude)
    lng, lat = longitude_latitude.split(',')
    "#{lat},#{lng}"
end

latlng = to_latlng("10.00,20.00")

그런데, 이 코드는

latlng = "10.00,20.00".split(',').reverse.join(',')

한방으로 끝낼 수도 있는 코드다. 사실 위쪽 코드가 더 보기 좋지만, 의도했다기 보다는 reverse를 까먹어서 메써드를 만들었다는 점이 문제.

3. 결론

(굳이) 결론을 내자면… 많은 기능을 제공해주는 플랫폼을 사용할 때는 공부를 놓지 말아야 한다는 점. 특히 changed? 메써드의 경우에는 3일정도의 삽질코딩이 있었다. ㅜㅜ