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.