1

habtm 장치 및 장치 habtm 주문을 주문하십시오.하드 코딩 된 SQL 조각이없는 HABTM 기반 검색

SELECT "orders".*

FROM "orders"

INNER JOIN "orders_devices" ON "orders_devices".order_id = "orders".id

INNER JOIN "devices" ON "devices".id = "orders_devices".device_id

WHERE ("orders"."devices" IN (110330561,530240381)) ORDER BY date DESC)

쿼리의 마지막 문자열은 다음과 같습니다

devices = Device.all :conditions => {:name => params[:devices].split(",")} 
@orders = Order.all :joins => :devices, :conditions => {:devices => devices} 

그것은 SQL 다음이 생성

나는 내가 다음과 같은 일을 해요 ALL 지정된 장치

를 가진 주문을 찾을 필요 정확하지 않으며 오류가 발생합니다.

SQLite3::SQLException: no such column: orders.devices

왜 나는이 결과를 얻고 있습니까?

어떻게 그렇게, SQL 쿼리 조각을 지정하지 않고, 문제를 해결할 수 :

:conditions => ['devices.id in (?)',[1,2]] 

답변

3

을 어쩌면 단지이?

@orders = Order.all(:joins => :devices, :conditions => {"devices.id" => devices}) 
+0

"devices.id"를 피할 수있는 방법이 있습니까? – AntonAL

+0

나는 그것을 표현하는 다른 방법을 모른다. 그것은 읽을 수있어, 나는 그것이 SQL 조각 (그것이 "장치의 ID"라고 말함)이라고 생각하지 않을 것이다. * arel *에서는'Devices.arel_table [: id] .in (devices)'와 같은 것을 할 수 있지만, 이것이 더 나은지는 의심 스럽습니다. * DataMapper *에서는 예제가 작동 할 수 있지만 DM에는 다른 문제가 있습니다. –

관련 문제