Пользовательские функции Rails 3 и arel

Как я могу вызвать пользовательскую функцию sql на arel? Что я имею в виду: мы можем сделать так: arel_table[:c].sum.as('summarizing')

Как я мог это сделать: arel_table[:created_at].date_format('%Y-%m-%d').as('что-то')?


person arthur.borisow    schedule 12.03.2012    source источник


Ответы (1)


есть только несколько предопределенных функций, таких как сумма, количество, среднее, минимум и т. д. Если вы хотите использовать что-то нестандартное, я считаю, что вам следует использовать Arel::Nodes::NamedFunction и функции, специфичные для базы данных. Например, для PostgreSQL это может быть примерно так:

t = Country.arel_table
func = Arel::Nodes::NamedFunction.new("to_char", [ t[:created_at], "YYYY-MM-DD"]).as("pretty_date")
query = t.project(func)

query.to_sql # => SELECT to_char("countries"."created_at", 'YYYY-MM-DD') AS pretty_date FROM "countries" 

Я надеюсь, что это поможет вам как-то, ура

person bart    schedule 13.09.2012