레일즈 : 레일에서 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
'program story' 카테고리의 다른 글
로그인 페이지로의 각도 재 지정 (0) | 2020.07.26 |
---|---|
vi에서 중복 행을 제거 하시겠습니까? (0) | 2020.07.26 |
virtualenv를 복제하는 방법 (0) | 2020.07.25 |
40 억 회 반복 Java 루프가 2ms 만 걸리는 이유는 무엇입니까? (0) | 2020.07.25 |
목록의 가능한 모든 순열을 생성하는 알고리즘? (0) | 2020.07.25 |