Używam ransack przez jakiś czas, ale nie widzę żadnej możliwości, aby zrobić to, czego szukasz. To, czego potrzebujesz, to instrukcja "case -> when", która może być utworzona w Railsach lub jako SQL z ActiveRecord.
Ransack daje możliwość utworzenia niestandardowego polecenia SQL, definiując atrybut, predykat i wartość, co następnie przekłada się na OSTATECZNE oświadczenie, o którym już wspomniałeś. Nie widzę żadnej możliwości, by powiedzieć Ransackowi, żeby filtrował to, co chcesz. Jednakże:
Co można to stworzyć możliwości takiego:
scope :column_b_gt_columnb_a, -> { where('column_b > column_a') }
A potem można budować swoje wyszukiwanie takiego:
Object({ column_b_gt_columnb_a: true })
Prawdopodobnie nie do końca to, czego szukaliśmy, ale myślę, to najlepsze, co dostaniesz ...
A jeśli chcesz zrobić to za pomocą Railsów, to możesz porównać wartości lub użyć instrukcji where gdzie użyłem powyższego.
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
Dla przykładu SQL spojrzeć tutaj
How do I compare two columns for equality in SQL Server?
Nadzieja to pomaga trochę!
A więc chcesz mieć atrybuty column_a i column_b. Nie jak "Person.search ({id_eq: 1}, {name_object:: abcd}). Result.to_sql' – Sontya