복붙노트

[RUBY-ON-RAILS] 결과에 순서 has_many 협회 카운트 레일

RUBY-ON-RAILS

결과에 순서 has_many 협회 카운트 레일

나는 아이 모델 (채용 정보)에서 반환 된 항목의 수에 의하여 결과 (ASC / DESC)를 주문할 수 있습니다 어쨌든 있나요?

@featured_companies = Company.joins(:jobs).group(Job.arel_table[:company_id]).order(Job.arel_table[:company_id].count).limit(10)

예를 들면 : 나는 정상에 가장 높은 작업과 함께 회사를 인쇄해야

해결법

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

    1.자주이 쿼리를 사용할 것으로 예상되는 경우에, 나는 당신이 사용하는 것이 좋습니다 내장 counter_cache

    자주이 쿼리를 사용할 것으로 예상되는 경우에, 나는 당신이 사용하는 것이 좋습니다 내장 counter_cache

    # Job Model
    class Job < ActiveRecord::Base
      belongs_to :company, counter_cache: true
      # ...
    end
    
    # add a migration
    add_column :company, :jobs_count, :integer, default: 0
    
    # Company model
    class Company < ActiveRecord::Base
      scope :featured, order('jobs_count DESC')
      # ...
    end
    

    다음처럼 사용

    @featured_company = Company.featured
    
  2. ==============================

    2.당신이 외부 대신이 일을 counter_cache를 사용하여 조인을 사용할 수 있도록 왼쪽 외부에 대한 지원이 레일 5에 도입 된 조인. 당신은 여전히 ​​0 관계를 가지고있는 기록을하겠습니다이 방법 :

    당신이 외부 대신이 일을 counter_cache를 사용하여 조인을 사용할 수 있도록 왼쪽 외부에 대한 지원이 레일 5에 도입 된 조인. 당신은 여전히 ​​0 관계를 가지고있는 기록을하겠습니다이 방법 :

    Company
      .left_joins(:jobs)
      .group(:id)
      .order('COUNT(jobs.id) DESC')
      .limit(10)
    

    쿼리의 SQL 상당이가 (그것을 .to_sql 호출하여 가지고)입니다 :

    SELECT "companies".* FROM "companies" LEFT OUTER JOIN "jobs" ON "jobs"."company_id" = "companies"."id" GROUP BY "company"."id" ORDER BY COUNT(jobs.id) DESC
    
  3. ==============================

    3.뭔가 같은 :

    뭔가 같은 :

    Company.joins(:jobs).group("jobs.company_id").order("count(jobs.company_id) desc")
    
  4. ==============================

    4.@ user24359 올바른이 있어야한다 :

    @ user24359 올바른이 있어야한다 :

    Company.joins(:jobs).group("companies.id").order("count(companies.id) DESC")
    
  5. ==============================

    5.탄의 대답에 추가되었습니다. 0 협회를 포함하려면

    탄의 대답에 추가되었습니다. 0 협회를 포함하려면

    Company.joins("left join jobs on jobs.company_id = companies.id").group("companies.id").order("count(companies.id) DESC")
    

    기본적으로 내부 조인 사용을 결합한다. 나는 0 연결을 포함하는 결합 왼쪽 사용하려

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

    6.

    Company.where("condition here...")
           .left_joins(:jobs)
           .group(:id)
           .order('COUNT(jobs.id) DESC')
           .limit(10)
    
  7. from https://stackoverflow.com/questions/16996618/rails-order-by-results-count-of-has-many-association by cc-by-sa and MIT license