2014-06-18 11 views
5

Ransack mi consente di costruire condizioni con un attributo, un predicato e un valore. Tuttavia, non sono stato in grado di trovare alcuna documentazione su come confrontare un attributo con un altro. Per esempio, come potrei creare una condizione di:confronto di un attributo con un altro con saccheggio

WHERE column_a < column_b 
+0

Quindi vuoi entrambi gli attributi column_a e column_b. Non come 'Person.search ({id_eq: 1}, {name_object:: abcd}). Result.to_sql' – Sontya

risposta

2

Sto usando Ransack per un bel po ', ma non vedo alcuna possibilità di fare ciò che si sta cercando. Quello che vuoi è una frase "case -> when", che può essere prodotta in Rails o come SQL con ActiveRecord.

Ransack ti dà la possibilità di creare un comando SQL personalizzato, definendo attributo, predicato e valore, che poi si traduce in WHERE Statement che hai già menzionato. Non vedo alcuna possibilità di dire direttamente a Ransack di filtrare per quello che vuoi. Tuttavia:

Che cosa si potrebbe è creare un ambito come:

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

E poi si può costruire la vostra ricerca come questa:

Object({ column_b_gt_columnb_a: true }) 

Probabilmente non è davvero quello che cercavi, ma penso questo è il massimo che si ottiene ...

E se si desidera farlo con Rails, si farebbe per confrontare i valori o usare detta dichiarazione in cui ho usato sopra.

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 

Per un esempio di un'istruzione SQL un'occhiata qui

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

Spero che questo aiuti un po '!

Problemi correlati