Rails使用元搜索和metawhere搜索计算字段

use*_*447 5 ruby ruby-on-rails meta-where

有没有人能够找到一种方法来使用rails 3中的metawhere或metasearch搜索计算字段?我可以搜索任何字段但计算字段.必须要有办法.对于不熟悉元搜索或metawhere的人来说,这里是一个railscast.

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

cha*_*sto 1

Metawhere(现在的 Squeel)扩展了 ActiveRecord 的 Arel 实现,Arel 是一个 SQL 生成器。这意味着它将转换 SQL 中的一些语句,例如:

@user.order("birthday").to_sql #=> SELECT users.* FROM users ORDER BY birthday
Run Code Online (Sandbox Code Playgroud)

当你这样做时,User.find(:all).sort_by(&:age) 你正在处理 find(:all) 的结果,一个数组,并且排序是在 Ruby 中使用 Enumerable 完成的,它速度较慢并且与数据库无关

所以不,您不能在以下位置使用 Metawhere

def age
  date.today - birthday
end
Run Code Online (Sandbox Code Playgroud)

除非你将结果存储在数据库中。

但是,您可以将 COUNT AVG MAX 等 SQL 语句与 GROUP 和 HAVING 一起使用,直接在数据库上进行计算。

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