2014-06-18 2 views
5

Ransack을 사용하면 속성, 조건 자 및 값이있는 조건을 만들 수 있습니다. 그러나 한 속성을 다른 속성과 비교하는 방법에 대한 문서를 찾을 수 없었습니다. 예를 들어, 내가 어떻게에 대한 조건을 만들 수 있습니다 : 나는 꽤 동안 더듬다을 사용하고하나의 속성과 다른 속성을 ransack으로 비교

WHERE column_a < column_b 
+0

따라서 column_a 및 column_b 속성을 모두 원합니다. 'Person.search ({id_eq : 1}, {name_object : : abcd}). result.to_sql'과는 다릅니다. – Sontya

답변

2

을,하지만 가능성은 당신이 찾고있는 무엇을 볼 수 없습니다. 당신이 원하는 것은 Rails 나 ActiveRecord가있는 SQL로 생성 될 수있는 "case -> when"문입니다.

Ransack은 속성, 술어 및 값을 정의하여 사용자 정의 SQL 명령을 생성 할 수있는 기능을 제공합니다. 그러면 사용자가 이미 언급 한 WHERE 문으로 변환됩니다. 나는 Ransack에게 당신이 원하는 것을 걸러 내기 위해 직접 말할 수있는 가능성을 보지 못했습니다. 그러나 :

scope :column_b_gt_columnb_a, -> { where('column_b > column_a') } 

그리고이 같은 검색 구축 할 수 있습니다 :

이 같은 범위를 만드는 것입니다 수 무엇

정말 아마

Object({ column_b_gt_columnb_a: true }) 

당신이 찾고있는 무엇을, 그러나 나는 생각한다 그게 당신이 얻을 수있는 최선의 ...

그리고 만약 당신이 가치를 비교하거나 위에서 언급 한 문을 사용하여 레일과 함께하고 싶습니다. SQL 문의 예를 들어

Records.each do |i| 
case i.variable_a 
    when i.variable_b 
    # do something when it's the same 
    when i.variable_a > i.variable_b 
    # do something when it's greater 
    end 
end 

이 조금 도움이

How do I compare two columns for equality in SQL Server?

희망 여기 봐!