복붙노트

[RUBY-ON-RAILS] 이유에 대해 종종 추천 default_scope 레일을 사용?

RUBY-ON-RAILS

이유에 대해 종종 추천 default_scope 레일을 사용?

어디서나 인터넷 사람들이 (가) default_scope 레일 사용하는 것은 나쁜 생각이라고 언급하고, 유래에 default_scope의 최고 히트는 덮어 쓰기하는 방법에 대해입니다. 이 엉망 느낌과 장점을 명시 적 질문 (나는 생각한다).

그래서 : 레일을 사용하는 이유에 대해 권장 default_scope?

해결법

  1. ==============================

    1.기본 예제를 고려 수 있습니다 :

    기본 예제를 고려 수 있습니다 :

    class Post < ActiveRecord::Base
      default_scope { where(published: true) }
    end
    

    사실 당신이 게시되지 않은 (개인) 게시물을 표시하고자 할 때 EXPLICT해야 할 수 있습니다 : 동기는 기본이 출판 확인합니다. 여태까지는 그런대로 잘됐다.

    2.1.1 :001 > Post.all
      Post Load (0.2ms)  SELECT "posts".* FROM "posts"  WHERE "posts"."published" = 't'
    

    그럼이 거의 우리가 기대하는 것입니다. 이제 시도는 할 수 있습니다 :

    2.1.1 :004 > Post.new
     => #<Post id: nil, title: nil, published: true, created_at: nil, updated_at: nil>
    

    그리고 우리는 기본 범위와 첫 번째 큰 문제가 있습니다 :

    => default_scope는 모델 초기화에 영향을 미칠 것

    이러한 모델의 새로 만든 경우에, default_scope 반영됩니다. 당신이되고 싶어했을 수도있는 동안 그래서 확인, 우연히 게시되지 않은 게시물을 표시하지 않으려면 이제 기본적으로 게시 된 사람을 만들고 있습니다.

    좀 더 정교한 예를 살펴 보겠습니다 :

    class Post < ActiveRecord::Base
      default_scope { where(published: true) }
      belongs_to :user
    end 
    
    class User < ActiveRecord::Base
      has_many :posts
    end
    

    첫 번째 사용자의 게시물을 얻을 수 있습니다 :

    2.1.1 :001 > User.first.posts
      Post Load (0.3ms)  SELECT "posts".* FROM "posts"  WHERE "posts"."published" = 't' AND "posts"."user_id" = ?  [["user_id", 1]]
    

    이 모습은합니다 (USER_ID에 대한 부분을 확인하기 위해 오른쪽으로 모든 방법을 스크롤 할 수 있는지 확인) 예상 좋아합니다.

    사용자의 관점에서 기록에 대한 말 - 게시되지 않은 포함 - 이제 우리는 모든 게시물의 목록을 얻을 싶어요. 당신은 당신이 default_scope의 효과 '실행 취소' '덮어 쓰기'나에게이 실현됩니다. 빠른 구글 후, 당신은 가능성이 범위가 지정되지 않은에 대해 알아 봅니다. 다음에 무슨 일이 일어 나는지 :

    2.1.1 :002 > User.first.posts.unscoped
      Post Load (0.2ms)  SELECT "posts".* FROM "posts"
    

    => 범위가 지정되지 않은 모든가 정상적으로 포함을 선택합니다 (그러나 이에 국한되지 않음) 협회에 적용 할 수있는 스코프 제거합니다.

    default_scope의 다른 효과를 덮어 쓸 수있는 여러 가지 방법이 있습니다. 매우 빠르게 복잡하게 그 권리를 취득 얻기 내가 처음에 default_scope를 사용하지 않는 주장, 안전한 선택이 될 것입니다.

  2. ==============================

    2.default_scope은 종종는 때때로 잘못 된 결과 집합을 제한하는 데 사용되기 때문에 대해 권장합니다. default_scope의 좋은 사용은 결과 세트를 주문하는 것입니다.

    default_scope은 종종는 때때로 잘못 된 결과 집합을 제한하는 데 사용되기 때문에 대해 권장합니다. default_scope의 좋은 사용은 결과 세트를 주문하는 것입니다.

    어디서 default_scope의 사용을 멀리하고 오히려 그에 대한 범위를 만들 것입니다.

  3. ==============================

    3.당신이 default_scope 모델 1에 많은 관계를 가진 모델의 인스턴스를 삭제하고 사용하지 않을 때의 default_scope 또 다른 이유는

    당신이 default_scope 모델 1에 많은 관계를 가진 모델의 인스턴스를 삭제하고 사용하지 않을 때의 default_scope 또 다른 이유는

    예를 들어 고려 :

        class User < ActiveRecord::Base
          has_many :posts, dependent: :destroy
        end 
    
        class Post < ActiveRecord::Base
          default_scope { where(published: true) }
          belongs_to :user
        end
    

    호출 user.destroy는 게시 된 모든 게시물이 삭제됩니다,하지만 게시되지 삭제 게시물하지 않습니다. 당신이 제거 할 사용자를 참조하는 레코드가 포함되어 있기 때문에 따라서 데이터베이스는 외래 키 위반이 발생합니다.

  4. ==============================

    4.난 단지 default_scope은 모든 상황에서 오름차순 또는 내림차순 순서로 일부 매개 변수를 주문에 유용하게 찾을 수 있습니다. 그렇지 않으면 내가 전염병처럼 피

    난 단지 default_scope은 모든 상황에서 오름차순 또는 내림차순 순서로 일부 매개 변수를 주문에 유용하게 찾을 수 있습니다. 그렇지 않으면 내가 전염병처럼 피

  5. ==============================

    5.나를 위해 나쁜 생각은 아니지만 신중하게 사용해야합니다! 나는 항상 필드가 설정되어있는 경우 특정 기록을 숨기고 싶어하는 경우가 있습니다.

    나를 위해 나쁜 생각은 아니지만 신중하게 사용해야합니다! 나는 항상 필드가 설정되어있는 경우 특정 기록을 숨기고 싶어하는 경우가 있습니다.

    그래서 의존하고 실제 요구됩니다.

  6. from https://stackoverflow.com/questions/25087336/why-is-using-the-rails-default-scope-often-recommend-against by cc-by-sa and MIT license