I가 다음과 같은 모델복잡한 쿼리를 arel의 유니온으로 다시 작성 하시겠습니까?
class Courier < ActiveRecord::Base
has_many :coverages
end
class Coverage < ActiveRecord::Base
belongs_to :courier
belongs_to :country_code
end
class CountryCode < ActiveRecord::Base
end
하고 난 다음 쿼리가 : 한마디로
# could i translate this into cleaner arel?
result = Courier.find_by_sql(<<SQL
select * from
(
select cc.*, cv.rate from couriers cc, coverages cv
where cv.country_code_id=#{country.id} and cv.courier_id=cc.id
union
select cc.*, cv.rate from couriers cc, coverages cv
where cv.country_code_id is null
and cv.courier_id=cc.id
and cv.courier_id not in (select courier_id from coverages where country_code_id=#{country.id})
) as foo order by rate asc
SQL
)
을 : 나는 주어진 국가 코드 나에 대한 범위를 모두 특사를 찾고 있어요 대신 공백 국가 코드로 대체 (대체).
쿼리가 작동하지만 더 좋은 방법이 있다면 궁금합니다. 당신이이 find_by_sql
당신이에 쿼리를 응축 수 유지하고 싶었다면
비슷한 질문이 있습니다. http://stackoverflow.com/questions/4522746/how-would-i-join-to-a-subselect-a-scope-using-rails-3-and-arel –