program story

레일즈 : 레일에서 find (id)가 예외를 발생시키는 이유는 무엇입니까?

inputbox 2020. 7. 25. 10:55
반응형

레일즈 : 레일에서 find (id)가 예외를 발생시키는 이유는 무엇입니까? [복제]


가능한 중복 :
Model.find (1)은 id 1이 없을 때 ActiveRecord 오류를 발생시킵니다.

데이터베이스에 id가 1 인 사용자가 없으면 시도 User.find(1)하면 예외가 발생합니다.

왜 이런거야?


이것이 RDoc에 표시된 것처럼 건축가가 find (id)가 작동하도록 의도 한 방식이므로 :

id로 찾기-특정 id (1), id 목록 (1, 5, 6) 또는 id 배열 ([5, 6, 10]) 일 수 있습니다. 나열된 모든 ID에 대한 레코드를 찾을 수 없으면 RecordNotFound가 발생합니다.

예외가 발생하지 않도록하려면 find_by_id를 사용하십시오. 지정된 id를 가진 객체를 찾을 수 없으면 nil을 반환합니다. 그러면 귀하의 예는 User.find_by_id(1)입니다.


runako의 설명에 더하여, 예외 발생 여부를 선택하는 것이 실제로 유용합니다. 블로그 응용 프로그램을 만들고 있는데 다음 또는 이전 블로그 항목을 볼 수 있도록 지원을 추가하고 싶었습니다. 첫 번째 게시물을 볼 때 이전 게시물을 가져 오거나 마지막 게시물을 볼 때 다음 게시물을 가져 Post오려고 nil할 때 반환하는 두 가지 인스턴스 메소드를 모델 에 추가 할 수있었습니다 .

def next
  Post.find_by_id(id + 1)
end

def previous
  Post.find_by_id(id - 1)
end

이렇게하면 조건부로 이전 게시물 / 다음 게시물 링크를 생성하는 도우미 코드가 RecordNotFound예외 를 처리하지 않아도됩니다 . 제어 흐름에 예외를 사용하기 때문에 좋지 않을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/831347/rails-why-does-findid-raise-an-exception-in-rails

반응형