Program Tip

Rails : 연관 값을 기반으로하는 ActiveRecord 쿼리

programtip 2021. 1. 10. 19:30
반응형

Rails : 연관 값을 기반으로하는 ActiveRecord 쿼리


2 가지 모델이 있습니다. Report그리고 Server이는 belongs_to와 has_many 관계를 가지고 있습니다. 내가 사용하는 접근 방법을 만들어 delegate그이 허용 Report관련 찾기를 Server.company_id. 이제 특정 속성이 5 인 특정 항목 과 관련된 Report모든 항목을 찾을 수 있는 쿼리를 실행하려고합니다 .ReportServercompany_id

여기 내 두 가지 모델이 있습니다. 그리고 예 Report, 속성이 없기 때문에 현재 쿼리가 작동 하지 않는다는 것을 알고 company_id있습니다.

그리고 아니요, 그 정보는에 속하지 않기 때문에 company_id내부에 저장하고 싶지 Report않습니다 Report.

보고서

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

다음과 같은 쿼리를 수행 할 수 있습니다.

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

나에게 이것은 원시 SQL에 대한 더 깨끗한 솔루션입니다.


저는 Rails 4.1.7을 사용하고 있으며 수락 된 답변이 저에게 효과적이지 않았습니다. 일한 것은 무엇입니까?

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

차이점은 where 절의 키가 복수형이라는 것입니다 (: server 대신 : servers).


이것은 트릭을 할 것입니다

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)

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

참조 URL : https://stackoverflow.com/questions/19489017/rails-activerecord-query-based-on-association-value

반응형