[RUBY-ON-RAILS] 레일 2 : Model.find (1) ID 1이 존재하지 않는 액티브 오류를 제공합니다
RUBY-ON-RAILS레일 2 : Model.find (1) ID 1이 존재하지 않는 액티브 오류를 제공합니다
나는 레일 2.3.5을 사용하고있는하고 그 내가 Model.find (1)을주고 1은 데이터베이스에없는 경우는 액티브 오류를 반환합니다. 그냥 Model.find_by_column의 경우로 전무를 반환해야한다 ( '..')?
해결법
-
==============================
1.이것은 예상 된 동작입니다. 나는 다윗이, 그래서 여기에 자신이 최선의 설명 루비, S., 토마스, D. & 한손, DH, 레일과 2009 년 애자일 웹 개발에서 인용 한 생각 3 판 제 3 판., 실용적인 책장 (p.330) .
이것은 예상 된 동작입니다. 나는 다윗이, 그래서 여기에 자신이 최선의 설명 루비, S., 토마스, D. & 한손, DH, 레일과 2009 년 애자일 웹 개발에서 인용 한 생각 3 판 제 3 판., 실용적인 책장 (p.330) .
-
==============================
2.당신이 정말로 예외를 원하지 않는 경우, 당신은 find_by_id 사용할 수 있습니다 :
당신이 정말로 예외를 원하지 않는 경우, 당신은 find_by_id 사용할 수 있습니다 :
# @user = User.find(params[:id]) # original code @user = User.find_by_id(params[:id]) if @user # found! else # not found end
이것은 빠르게 별도의 존재보다 더해야 하는가? 검사.
편집 : 참고 @Miguelgraz은 주석으로, 레일 4 대신 User.find_by 말을해야한다고 (ID : PARAMS를 [: ID]). 같은 기능을하지만 지금은 구현이 필요하지 않습니다 method_missing.
-
==============================
3.예외를 던지는 것은 예상 된 동작입니다.
예외를 던지는 것은 예상 된 동작입니다.
당신이 허락한다면 사실 이벤트의 정상적인 과정에서 예외 이동은 레일 서버가 적절한 404 페이지를 찾을 수 없습니다 오류를 반환합니다 처리되지 않은.
당신이 반환에 대한 원한다면 당신은 스스로를 잡을 수 전무 :
begin @model = Model.find(id_provided) rescue ActiveRecord::RecordNotFound => e @model = nil end
-
==============================
4.당신은 예외가 파인더 방법 find_by_attributes 맛에 던져 질하려면, 당신은 강타를 사용할 수 있습니다! 방법의 버전.
당신은 예외가 파인더 방법 find_by_attributes 맛에 던져 질하려면, 당신은 강타를 사용할 수 있습니다! 방법의 버전.
예를 들어,
Model.find_by_category!(a_category_value)
일치하는 항목이없는 경우 RecordNotFound 발생합니다.
나는 예외에 대한 일반적인 오류 처리기를 가지고 있고 지정된 매개 변수와 일치하는 리소스가 발견되지 않을 때 내 행동이 일관되게 행동 할 편안하고 컨트롤러와 같은 상황이 될 DRY를 발견했다.
-
==============================
5.레코드를 가져 오는 전에 존재하는지 확인할 수 있습니다.
레코드를 가져 오는 전에 존재하는지 확인할 수 있습니다.
@model = Model.find(id) if Model.exists?(id)
-
==============================
6.4 방법은 레일
4 방법은 레일
if user = User.find_by(id: params[:id]) #do something with user else #throw error or redirect raise ActiveRecord::RecordNotFound end
-
==============================
7.당신은 (귀하의 경우 ID를) 필요한 속성으로 find_by 사용할 수있는이 지정된 ID를 찾을 수없는 경우 오류를주는 대신 nil을 반환합니다.
당신은 (귀하의 경우 ID를) 필요한 속성으로 find_by 사용할 수있는이 지정된 ID를 찾을 수없는 경우 오류를주는 대신 nil을 반환합니다.
Model.find_by_id(id_value)
당신은 또한 어디에 사용할 수 있지만 0 개 이상의 레코드와 활성 기록 관계를 반환 위치를 제로 레코드를 반환하는 경우에 하나 개의 레코드 만 또는 전무를 반환 처음 사용할 필요가 있음을 알아야합니다.
Model.where(id: id_value).first
-
==============================
8.당신은 간단하게 사용할 수 있습니다 :
당신은 간단하게 사용할 수 있습니다 :
user = User.find(10) rescue nil
from https://stackoverflow.com/questions/4966430/rails-2-model-find1-gives-activerecord-error-when-id-1-does-not-exist by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 sqlite3를 "기본 값 NULL과 NOT NULL 열을 추가 할 수 없습니다"해결하기 위해? (0) | 2020.02.14 |
---|---|
[RUBY-ON-RAILS] Process.fork를 대체 Process.spawn 사용 (0) | 2020.02.14 |
[RUBY-ON-RAILS] 왜`아무것도 할 것 config.time_zone`하지 않는 이유는 무엇입니까? (0) | 2020.02.14 |
[RUBY-ON-RAILS] 날짜 검증에 내장 된 레일 (0) | 2020.02.14 |
[RUBY-ON-RAILS] 어떻게 카피 바라의 URL에 POST합니까? (0) | 2020.02.14 |