[ruby] orm : unscoped

Ruby의 ORM(Object-Relational Mapping)에서 `unscoped`는 ActiveRecord라는 Ruby의 ORM 라이브러리에서 제공하는 메소드 중 하나입니다. 

ActiveRecord는 Rails에서 가장 많이 사용되는 ORM 라이브러리로, 데이터베이스와 Ruby 객체를 연결하여 데이터베이스 조작을 추상화하고 Ruby 객체를 통해 데이터베이스를 조작할 수 있게 해줍니다. `unscoped`는 이러한 ActiveRecord에서 사용되는 메소드 중 하나로, 레코드 검색 시에 기본적으로 적용되는 스코프(scope)를 제거하는 역할을 합니다.

ActiveRecord에서는 레코드를 검색할 때 기본적으로 적용되는 스코프가 있을 수 있습니다. 스코프는 일종의 쿼리 필터링을 의미하며, 이로 인해 레코드 검색 결과가 제한될 수 있습니다. 예를 들어, 삭제되지 않은 레코드만 검색하도록 스코프가 설정되어 있다면, 삭제된 레코드는 검색 결과에 나타나지 않습니다.

하지만 때로는 스코프를 무시하고 모든 레코드를 검색해야 할 때가 있을 수 있습니다. 이때 `unscoped` 메소드를 사용하면 기본적으로 설정된 스코프를 제거하고 모든 레코드를 검색할 수 있습니다.

예시를 통해 이해해보겠습니다:

class Post < ApplicationRecord
  default_scope { where(deleted: false) }
end

# 기본 스코프로 인해 삭제되지 않은 레코드만 검색
posts = Post.all # SELECT * FROM posts WHERE deleted = false;

# unscoped를 사용하여 스코프를 제거하고 모든 레코드 검색
all_posts = Post.unscoped.all # SELECT * FROM posts;


위의 예시에서 `Post` 모델은 `deleted`라는 불리언 속성을 가지며, 기본 스코프로 인해 `deleted: false`인 레코드만 검색됩니다. 하지만 `unscoped` 메소드를 사용하면 스코프를 제거하고 모든 레코드를 검색할 수 있습니다.

'┝ 개발 언어 > ┝ ruby' 카테고리의 다른 글

[ruby] .map 메서드  (0) 2023.08.31
[ruby] 모델 테스트하는 방법  (0) 2023.08.10
[ruby] validates_inclusion_of  (0) 2023.07.18
[ruby] 변수 앞의 @  (0) 2023.07.10
[ruby] '=>'는  (0) 2023.07.10