Uzante AREL por SQL funkcioj
Hodiaŭ mi bezonis datumbazan informpeton por trovi modelan objekton kreita antaŭ x tagoj. ActiveRecord havas created_at
kampon, sed ĝi estas prezentata kiel tempo, ne dato. La plej facila metodo por solvi la problemon estas uzi where
kun ĉeno, sed mi volis uzi AREL kaj mi volas montri al vi kiel fari same.
Unue, kun ĉeno:
Posto.where("date(created_at) < ?", Date.current).to_sql
=> "SELECT \"postoj\".* FROM \"postoj\" WHERE (date(created_at) < '2015-04-10')"
Kun AREL:
data_funkcio = Arel::Nodes::NamedFunction.new "DATE", [ Posto.arel_table[:created_at] ]
Posto.where(data_funkcio.lt(Date.current))
=> "SELECT \"postoj\".* FROM \"postoj\" WHERE (DATE(\"postoj\".\"created_at\") < '2015-04-10')"
La aldona avantaĝo estas ke se oni ŝanĝas la nomon de la tablo, AREL ŝanĝus aŭtomate. Alia avantaĝo estas ke se vi uzas join
kaj pli ol du tabloj havas created_at
AREL helpas ĉar ĝi enmetis la nomon de la table.