2014-04-05 3 views
1

모델을 조인 fruit_type, F1, F2 필드를 검색하여 모든 과일을 얻을 수있는 방법레일은 두 개의 테이블

Fruit: fields - "fruit_type" 

has_many: apples 
has_many :bananas 



Apple fields: f1, f2, fruit_id, some other fields 
belongs_to: fruit 

Banana: f1, f2, fruit_id, some other fields related to banana 
belongs_to :fruit 

. 우리는 3 가지 입력을 가지고 있습니다 : fruit_type, f1, f2 그래서 하나의 필드 (예 : f1) 만 입력하면 f1 필드 만 검색됩니다. fruit_type, f1, f2 입력을 입력하면 f1, f2 필드가 모두 검색되고 마지막으로 과일이 반환됩니다.

말할 수 있습니다 F1이나 F2 만 입력 작업, 다음 아래 입력 중 하나

fruit_type, F1은, F2 입력도 입력 한 경우
scope = Fruit.joins("left join apples on apples.fruit_id=fruits.id left join bananas on bananas.id=fruits.id where (apples.f1 like '#{f1_input_val}%' or bananas.f1 like '#{f1_input_val}%')") 

, 무슨 쿼리? 작동하지 않는 아래 :

scope = Fruit.all #if no queries 

scope = scope.where("fruit_type like ?", "#{fruit_type_input}%") if fruit_type_input.present? 

scope = scope.joins("left join apples on apples.fruit_id=fruits.id left join bananas on bananas.id=fruits.id where (apples.f1 like '#{f1_input_val}%' or bananas.f1 like '#{f1_input_val}%')") if f1_input_val.present? 

scope = scope.joins("left join apples on apples.fruit_id=fruits.id left join bananas on bananas.id=fruits.id where (apples.f2 like '#{f2_input_val}%' or bananas.f2 like '#{f2_input_val}%')") if f2_input_val.present? 
+0

모델 코드를 게시하십시오. '과일', '사과', '바나나'와는 어떤 관계가 있습니까? –

+0

완료 .................. – user2349115

답변

0

난 당신이 joininingwhere 절을 분리 할 필요가 있다고 생각합니다.

scope = Fruit.all #if no queries 

scope = scope.where("fruit_type like ?", "#{fruit_type_input}%") if fruit_type_input.present? 

if f1_input_val.present? or f2_input_val.present? 
    scope = scope.joins("left join apples on apples.fruit_id=fruits.id left join bananas on bananas.id=fruits.id") 

    scope = scope.where("apples.f1 like '#{f1_input_val}%' or bananas.f1 like '#{f1_input_val}%')") if f1_input_val.present? 
    scope = scope.where("apples.f2 like '#{f2_input_val}%' or bananas.f2 like '#{f2_input_val}%')") if f2_input_val.present? 
end 
scope # just return a resulted scope