복붙노트

[RUBY-ON-RAILS] 레일 : 액티브 쿼리 협회 값을 기준으로

RUBY-ON-RAILS

레일 : 액티브 쿼리 협회 값을 기준으로

나는이 개 모델이있다. belongs_to와 has_many 관계를 가지고 보고서 및 서버. 나는 보고서 관련 Server.company_id을 찾을 수 있습니다 대리자를 사용하여 접근 방법을 만들었습니다. 지금, 나는 나 5의 특정의 COMPANY_ID 속성이 특정 서버와 관련된 모든 보고서를 찾을 수 있도록 보고서에 쿼리를 실행합니다.

여기 내 두 모델이다. 보고서 속성 COMPANY_ID이 없기 때문에 그리고 네 나는 현재 쿼리 못해 일을 알고있다.

그리고 아니, 그 정보는 보고서에 속해 있지 않기 때문에 보고서의 COMPANY_ID 내부를 저장할니까.

보고서

class Report < ActiveRecord::Base

 belongs_to :server

 delegate :company_id, :to => :server

    class << self

        def method(url, base_url)
            #Report.where(company_id: 5)
        end
    end

end

섬기는 사람

class Server < ActiveRecord::Base

 attr_accessible :company_id

 has_many :reports

end

해결법

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

    1.이 같은 쿼리를 수행 할 수 있습니다 :

    이 같은 쿼리를 수행 할 수 있습니다 :

    Report.joins(:servers).where(:servers => {:company_id => 5})
    

    나를 위해,이 원시 SQL에 청소기 솔루션입니다.

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

    2.나는 레일 4.1.7를 사용하고 있는데 허용 대답은 나를 위해 작동하지 않았다. 작품은 무엇을했다

    나는 레일 4.1.7를 사용하고 있는데 허용 대답은 나를 위해 작동하지 않았다. 작품은 무엇을했다

    Report.joins(:server).where(:servers => {:company_id => 5})
    

    (: 서버 대신 : 서버)의 차이가 절을 복수로되어있는 키가 있습니다

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

    3.이 트릭을 할해야

    이 트릭을 할해야

    Report.joins(:server).where('servers.company_id = ?', 5)
    

    당신은 또한과 같이 이것에 대한 범위를 추가 할 수 있습니다

    scope :with_company_id, lambda {|id| joins(:server).where('servers.company_id = ?', id) }
    

    다음 쓰기

    Report.with_company_id(5)
    
  4. ==============================

    4.Server.where (COMPANY_ID : 5) .first.reports

    Server.where (COMPANY_ID : 5) .first.reports

  5. from https://stackoverflow.com/questions/19489017/rails-activerecord-query-based-on-association-value by cc-by-sa and MIT license