有没有人能够找到使用rails 3中的metawhere或元搜索搜索计算字段的方法?我可以搜索任何字段但计算字段。必须要有办法。对于不熟悉元搜索或metawhere的人来说,这里是一个railscast。
答案 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中完成排序,这比较慢并且与无关。数据库
所以不,你不能在
上使用Metawheredef 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")