복붙노트

[RUBY-ON-RAILS] LEFT OUTER 레일에 조인 3

RUBY-ON-RAILS

LEFT OUTER 레일에 조인 3

나는 다음과 같은 코드가 있습니다 :

@posts = Post.joins(:user).joins(:blog).select

이는 모든 게시물을 찾아 그들과 관련된 사용자와 블로그를 반환하기위한 것입니다. 많은 레코드를 반환하지 않습니다 생성 조인 그러나, 사용자들은 내부가 가입한다는 수단 선택 사항입니다.

어떻게 LEFT OUTER 대신 가입 생성이 사용합니까?

해결법

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

    1.

    @posts = Post.joins("LEFT OUTER JOIN users ON users.id = posts.user_id").
                  joins(:blog).select
    
  2. ==============================

    2.당신은 레일 가이드에 설명이 포함이 함께 할 수있는 :

    당신은 레일 가이드에 설명이 포함이 함께 할 수있는 :

    Post.includes(:comments).where(comments: {visible: true})
    

    결과 :

    SELECT "posts"."id" AS t0_r0, ...
           "comments"."updated_at" AS t1_r5
    FROM "posts" LEFT OUTER JOIN "comments" ON "comments"."post_id" = "posts"."id"
    WHERE (comments.visible = 1)
    
  3. ==============================

    3.나는 squeel 보석의 큰 팬입니다 :

    나는 squeel 보석의 큰 팬입니다 :

    Post.joins{user.outer}.joins{blog}
    

    그것은 둘 다 내부를 지원하고 외부는 다형성 belongs_to 관계에 대한 클래스 / 유형을 지정하는 기능뿐만 아니라, 결합한다.

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

    4.사용 eager_load :

    사용 eager_load :

    @posts = Post.eager_load(:user)
    
  5. ==============================

    5.기본적으로 당신은 내부 조인 수행, 액티브 :: 자료 # 명명 된 연결을 조인 통과 할 때. 당신은 당신의 왼쪽 외부 조인을 나타내는 문자열을 전달해야합니다.

    기본적으로 당신은 내부 조인 수행, 액티브 :: 자료 # 명명 된 연결을 조인 통과 할 때. 당신은 당신의 왼쪽 외부 조인을 나타내는 문자열을 전달해야합니다.

    문서에서 :

  6. ==============================

    6.액티브의 left_outer_joins 방법이있다. 이처럼 사용할 수 있습니다 :

    액티브의 left_outer_joins 방법이있다. 이처럼 사용할 수 있습니다 :

    @posts = Post.left_outer_joins(:user).joins(:blog).select
    
  7. ==============================

    7.좋은 소식은, 지금 5 레일 왼쪽 외부 조인을 지원합니다. 귀하의 질의는 지금과 같을 것이다 :

    좋은 소식은, 지금 5 레일 왼쪽 외부 조인을 지원합니다. 귀하의 질의는 지금과 같을 것이다 :

    @posts = Post.left_outer_joins(:user, :blog)
    
  8. ==============================

    8.

    class User < ActiveRecord::Base
         has_many :friends, :foreign_key=>"u_from",:class_name=>"Friend"
    end
    
    class Friend < ActiveRecord::Base
         belongs_to :user
    end
    
    
    friends = user.friends.where(:u_req_status=>2).joins("LEFT OUTER JOIN users ON users.u_id = friends.u_to").select("friend_id,u_from,u_to,u_first_name,u_last_name,u_email,u_fbid,u_twtid,u_picture_url,u_quote")
    
  9. from https://stackoverflow.com/questions/3245201/left-outer-joins-in-rails-3 by cc-by-sa and MIT license