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

时间:2011-08-17 03:13:21

标签: ruby-on-rails ruby meta-where

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

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

1 个答案:

答案 0 :(得分:1)

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),一个数组的结果,并且使用Enumerable在Ruby中完成排序,这比较慢并且无关。数据库

所以不,你不能在

上使用Metawhere
def age
  date.today - birthday
end

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

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

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