Program Tip

Rails .where 대 .find

programtip 2020. 10. 21. 21:21
반응형

Rails .where 대 .find


메서드가 아닌 Model.where결과가 하나 뿐인 경우에도 메서드가 항상 배열을 반환 한다는 것을 알았습니다 Model.find. 이것에 대한 이유가 있습니까? Model.whereRails 3.X부터 선호하는 기능 이라고 생각 했습니다.

Model.find단일 결과를 Model.where기대할 때 둘 이상의 결과를 기대할 때 사용해야합니까 ?


  • where모델 객체 ActiveRecord::Relation컬렉션(배열이 아닌 배열)을 반환 합니다. 조건과 일치하는 것이 없으면 단순히 빈 관계를 반환합니다.

  • find(및 관련 동적 find_by_columnname메서드)는 단일 모델 개체를 반환 합니다. 아무것도 발견 ActiveRecord::RecordNotFound되지 않으면 예외가 발생합니다 (동적 find_by_메서드 에서는 제외됨 ).

    findID 목록이 주어지면 Relation이 아닌 레코드 배열을 반환 할 수 있지만 , whereRails 3부터 사용하는 것이 선호 find됩니다. 이제 많은 유사한 용도 더 이상 사용되지 않거나 완전히 사라졌습니다 .

예, 단일 객체 만 원하고 기대하는 경우 사용하는 find것이 더 쉽습니다 Model.where.first. 그렇지 않으면을 호출해야합니다 .

이전 스타일의 해시 옵션 find및 많은 동적 find_메서드는 Rails 4.0에서 더 이상 사용되지 않습니다 ( 관련 릴리스 노트 참조 ).


실제로 얻은 find_by모델 객체를 가져옵니다.whereActiveRecord::Relation

def find_by(*args)
  where(*args).take
end

출처


Model.find기본 키 열을 사용하고 있습니다. 따라서 항상 정확히 하나의 결과가 있습니다. ID로 식별되는 특정 요소를 찾을 때 사용하십시오.

참고 URL : https://stackoverflow.com/questions/9574659/rails-where-vs-find

반응형