Ho un rapporto abbastanza comune habtm
:Convert ActiveRecord interrogazione HABTM di Arel
Photo has_and_belongs_to_many :tags
Tag has_and_belongs_to_many :photos
Nel mio modello Foto Ho un metodo "con tag" che uso per trovare una foto che viene etichettato con un dato set di tag_ids. Questa query deve corrispondere solo alle foto che hanno tutti i tag specificati, ma ignorando la presenza o la mancanza di altri tag. Ecco il mio metodo:
Questo funziona come previsto.
Ora, al fine di integrare questo meglio con alcune altre biblioteche che sto usando, ho bisogno di ri-scrivere questo in Arel. (rendilo un nodo Arel ?, non sai come lo chiami normalmente).
ho avuto modo di sperimentare con questo, ma ad essere onesti non ho mai provato ad usare Arel prima, quindi sono un po 'perso. Ho avuto modo di sperimentare nella console e provato:
t = Photo.arel_table
q = t.join(:tags).on(t[:tags_id].in(array))
Photo.where(q)
Ma, (1) non credo q
è la query giusta, in primo luogo, e (2) crea un Arel::SelectManager
, che quando passò a una chiamata dove si alza Cannot visit Arel::SelectManager
. Quindi, ovviamente, sto sbagliando.
Aggiornamento: Solo per essere più specifico qui, sto cercando di restituire un nodo Arel, perché sto lavorando con una gemma (ransack) che si aspetta che tu passi i nodi Arel per i metodi di ricerca. Ransack collegherà questo nodo Arel ad altri nel generare query di ricerca complesse.
modo un guru Arel mostrarmi come farlo correttamente?
Questa non è una risposta, ma prova Squeel !!Le impostazioni predefinite di AR sono abbastanza zoppe e mentre AREL è molto più potente, è tristemente documentato e non molto amichevole per gli sviluppatori. La gemma di squeel è abbastanza buona per fare cose come questa! –