Как определить атрибут модели как выражение другого атрибута?
Пример:
Class Home < ActiveRecord::Base
attr_accessible :address, :phone_number
Теперь я хочу иметь возможность возвращать атрибут наподобие: area_code, который будет выражением sql наподобие "substr (phone_number, 1,3)".
Я также хочу иметь возможность использовать выражение / атрибут в группе по запросу для отчета.
Кажется, что это выполняет запрос, но не возвращает объект с именованными атрибутами, так как мне использовать его в представлении?
Консоль Rails:
@ac = Home.group("substr(phone_number, 1,3)").count
=> #<OrderedHash {"307"=>3, "515"=>1}>
Я также ожидал, что это сработает, но не уверен, какой тип объекта он возвращает:
@test = Home.select("substr(phone_number, 1,3) as area_code, count(*) as c").group("substr(phone_number, 1,3)")
=> [#<Home>, #<Home>]
Чтобы расширить последний пример. Вот с активной регистрацией записи:
>Home.select("substr(phone_number, 1,3) as area_code, count(*) as c").group("substr(phone_number, 1,3)")
Output:
Home Load (0.3ms) SELECT substr(phone_number, 1,3) as area_code, count(*) as c FROM "homes" GROUP BY substr(phone_number, 1,3)
=> [#<Home>, #<Home>]
Так что он выполняет запрос, который мне нужен, но дает мне неожиданный объект данных. Разве я не должен получить что-то подобное?
[ #<area_code: "307", c: 3>, #<area_code: "515", c: 1> ]