2012-04-15 2 views
3

결과에 모든 모델의 결과가 포함될 수 있도록 검색하려는 여러 모델이 있습니다. "부츠"를 검색하고 싶다고 가정 해 봅시다. 부츠를 판매하는 소매 업체와 실제 부츠는 물론 부츠 범주를 반환하기를 원합니다. 카테고리, 공급 업체 및 제품에 대한 모델이 있습니다.내가 찾는 레일스 관계는 무엇입니까?

모든 개체가 조인을 요구하므로이 경우 조인 테이블을 만들지 않아도됩니다. 모든 개체가 검색에 포함되기 때문에 필요하지 않습니다.

나는 덩굴손 보석을 사용하려고 생각하고 있지만 이것은 내 검색 절차에 관계없이 동일하기 때문에 질문에 중요하다고 생각하지 않습니다.

어쩌면 compos_of 관계가 이해가되지만 어쨌든 내 머리를 감쌀 수는 없습니다.

답변

1

가정하여 Productbelongs_toVendorbelongs_toCategory 여기 쿼리 :

string_to_search = 'boots' 
@products = Product.where("title LIKE ?", "%#{string_to_search}%").includes(:vendor, :category).all 

그것은 모든 범주 및 공급 업체와 함께 필요한 제목의 내용으로 모든 제품을 가져 오는 것은. 특정 제품에 대한 범주/공급 업체를 가져 오는 추가 쿼리가없는 결과 데이터를 탐색 할 수 있습니다. 당신이해야하는 경우

, 말의 @products에서 공급 업체의 목록을 추출 - 바로 사용

@vendors = @products.map &:vendor 
+0

그것은 매끄러운 해결책입니다. 제 응답은 검색이 여러 속성, 즉 제목이나 제품의 설명 또는 공급 업체의 설명 속성에 있다고 가정합니다.나는 일종의 덩어리 보석에 대한 귀하의 요점을 놓쳤다. 나는 그것을 모른다. 그러나이 대답과 함께 사용하는 덩어리가 ActiveModel에 뒤틀린 UNIONS보다 쉬울 것 같다. – RadBrad

+0

범주 이름 또는 공급 업체 속성 (이름, 판매용 제품 등)이 쿼리와 일치하는 상황을 처리하지 않습니다. 결과 집합에는 형식에 관계없이 일치하는 개체가 포함되어야하므로 공급 업체, 범주 및 제품을 포함하도록 결과가 필요합니다. – Eric

+0

그런 경우에는 3 개의 쿼리 만 필요합니다. 하나는 모델 당 하나, 그렇지 않습니까? – jdoe

0

당신이 수공예로 만든 SQL 쿼리에서 UNION 연산자를 사용해야한다고 생각합니다. ActiveModel을 사용하여 가상 모델을 만들 수 있습니다. 실제 모델에서 검색 결과를 수집하고 쿼리에 대한 ActiveRecord 인터페이스를 제공하여 집계 기능을 수행 할 수 있습니다.

+0

내가 SQL 설명서 경로를 회피하는 경향이 생각 나는 RoR에의 케이크를 많이 잃어 버릴 것 같은. 설명대로 집계 모델을 만드는 방법은 무엇입니까? – Eric

+0

내 대답은 하나의 솔루션이었습니다. 수동 SQL UNION을 사용하고 ActiveModel에서 랩핑하여 RoR 제품을 다시 얻었습니다. 나에게 말하면 나는 그것을 통해 당신을 걸을 수있다. – RadBrad

+0

오, 알았어. 귀하의 채팅 정보가 보이지 않습니다. 어떻게 연결해야합니까? – Eric

관련 문제