복붙노트

[RUBY-ON-RAILS] 3 레일 - 포함으로 선택?

RUBY-ON-RAILS

3 레일 - 포함으로 선택?

여기에 포함하여 선택 중첩 된입니다 :

@items = Item.where("complete = ?", true).includes( :manufacturer, {:order=>[:supplier, :agent] })

이것은 위의 모든 포함 된 테이블에서 데이터의 행 1000를 끌어와 같은 과세 쿼리입니다.

어떻게는 선택 특정 필드에 쿼리를받을 수 있나요?

해결법

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

    1.이 ARel의 선택 방법은,하지만 당신은 (즉, 복수 및 다형성 모델이 있거나 set_table_name 또는 다른 유사한 표준이 아닌 연습을 사용하는 경우 경우 조심) 올바른 테이블 이름을 사용해야합니다

    이 ARel의 선택 방법은,하지만 당신은 (즉, 복수 및 다형성 모델이 있거나 set_table_name 또는 다른 유사한 표준이 아닌 연습을 사용하는 경우 경우 조심) 올바른 테이블 이름을 사용해야합니다

    @items = Item.
      select('users.name', 'users.created_at', 'orders.created_at', 'suppliers.name', 'agents.name', 'manufacturers.name').
      where(:users => { :fulfilled => true }).
      includes(:orders => [:supplier, :agent], :manufacturer)
    

    "우리는 포함하지 조인으로 선택 사용할 수 있습니다"- @Bhavesh_A_P을

    @Bhavesh_A_P 위에서 지적한 바와 같이, 일관된 동작을 생성하지 않습니다 포함하여 선택합니다. 포함 연관이없는 결과를 반환하지 않는 경우가 결과를 반환하는 경우, 선택 사항이 적용되지 않습니다, 제대로 작동 선택하는 것이 나타납니다. 사실, 완전히 당신의 선택 문이 유효하지 않은 테이블 이름을 참조 할 수 있도록, 무시되고 오류는 발생되지 않을 것입니다. 일관된 동작을 생성 할 것이다 조인으로 선택합니다.

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

    2.사실 우리는 포함하여 선택 사용할 수 없습니다. 조인으로 만 사용할 수 있습니다.

    사실 우리는 포함하여 선택 사용할 수 없습니다. 조인으로 만 사용할 수 있습니다.

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

    3.이 문제는 체인의 '선택'메소드 호출 등이 해결되지 않는다. 우리가 내장 유사한 액티브 :: 관계에서 호출하면 '포함', '선택'에 대한 모든 통화를 대체 할 것으로 보인다.

    이 문제는 체인의 '선택'메소드 호출 등이 해결되지 않는다. 우리가 내장 유사한 액티브 :: 관계에서 호출하면 '포함', '선택'에 대한 모든 통화를 대체 할 것으로 보인다.

    scope :active, where("hired_on < ? AND (separated_on > ? OR separated_on IS NULL)", Time.now, Time.now )
    
    scope :with_role, lambda {|roles| includes(:team_member_roles).where(:team_member_roles => {:role => roles } ) }
    
    scope :with_site_code, lambda {|site_codes| includes(:team_member_sites).where(:team_member_sites => {:site_code => site_codes } ) }
    
    TeamMember.select("team_members.email, team_members.first_name, team_members.last_name").active.with_site_code(params[:site_code]).with_role(["senior_editing", "senior_and_reg_editing"]) 
    

    도시 된 바와 같이, 쿼리는 모든 열을 선택합니다.

    2 범위를 사용하면 쿼리 작품, '조인'대신 '포함': 만 3 지정된 열이 선택됩니다.

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

    4.

    Item.where("fulfilled = ?", true)
        .includes({:orders =>[:suppliers, :agents]}, :manufacturers)
        .select("users.name, users.created_at, orders.created_at, suppliers.name, agents.name").
        .order('orders.created_at DESC')
    
  5. from https://stackoverflow.com/questions/4047833/rails-3-select-with-include by cc-by-sa and MIT license