DonutWorks / Ari

0 stars 0 forks source link

where(condition).first를 find_by(condition) 또는 find_by_xxx(condition)으로 바꾸기 #325

Closed shaynekang closed 9 years ago

shaynekang commented 9 years ago

레일즈 모델에는 find_by라는 메소드가 있습니다. 인자로 받은 조건에 해당하는 모델 인스턴스 중 첫번째 것만 가져온다는 것이 where와의 차이점입니다. 가령

def response_status(notice)
  response = responses.where(notice: notice).first
  if response
    response.status
  else
    "not"
  end
end

def response_status(notice)
  response = responses.find_by(notice: notice)
  if response
    response.status
  else
    "not"
  end
end

로 수정해 줄 수 있습니다. 또한 레일즈는 메타프로그래밍을 통해서 컬럼 이름과 일치하는 첫번째 인스턴스를 가져올 수도 있는데, 이를 활용하면

def response_status(notice)
  response = responses.find_by_notice_id(notice)
  if response
    response.status
  else
    "not"
  end
end

이렇게 고칠 수 있습니다. 코드를 살펴보고 다른 부분도 이에 맞게 고쳤으면 좋겠습니다. ㅎㅎ