Rails Поиск вычисляемых полей с использованием metasearch и metawhere - PullRequest
5 голосов
/ 17 августа 2011

Кто-нибудь смог найти способ поиска в вычисляемом поле с помощью мета-места или метапоиска в rails 3?Я могу искать любое поле, кроме рассчитанных полей.Должен быть способ.Для тех, кто не знаком с метапоиском или метаисследованием, здесь есть Railscast.

http://railscasts.com/episodes/251-metawhere-metasearch

1 Ответ

1 голос
/ 12 октября 2011

Metawhere (теперь Squeel) расширяет реализацию ActiveRecord Arel, который является генератором SQL. Это означает, что он превратит некоторые операторы в SQL, например:

@user.order("birthday").to_sql #=> SELECT users.* FROM users ORDER BY birthday

Когда вы делаете User.find(:all).sort_by(&:age), вы работаете с результатом find (: all), Array, и сортировка выполняется в Ruby с Enumerable, который работает медленнее и не имеет никакого отношения к базе данных .

Так что нет, вы не можете использовать Metawhere на

def age
  date.today - birthday
end

, если вы не сохраните результат в базе данных.

Однако вы можете использовать операторы SQL, такие как COUNT AVG MAX и т. Д. С GROUP и HAVING, чтобы выполнять вычисления непосредственно в базе данных.

User.select("users.*, COUNT(user_id) AS vote_num").joins(:votes).group("user_id")

...