반응형
Rails : 연관 값을 기반으로하는 ActiveRecord 쿼리
2 가지 모델이 있습니다. Report
그리고 Server
이는 belongs_to와 has_many 관계를 가지고 있습니다. 내가 사용하는 접근 방법을 만들어 delegate
그이 허용 Report
관련 찾기를 Server.company_id
. 이제 특정 속성이 5 인 특정 항목 과 관련된 Report
모든 항목을 찾을 수 있는 쿼리를 실행하려고합니다 .Report
Server
company_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
반응형
'Program Tip' 카테고리의 다른 글
SQL Server JOIN에 NULL 값이 없습니다. (0) | 2021.01.10 |
---|---|
단계별 Symfony2 파일 업로드 (0) | 2021.01.10 |
RecyclerView 그리드에 불확실한 진행률 표시 줄을 바닥 글로 추가 (0) | 2021.01.10 |
flexbox가있는 css 정사각형 그리드 (0) | 2021.01.10 |
Xcode 프로비저닝 프로파일 위치 (0) | 2021.01.10 |