有没有人能够找到一种在 rails 3 中使用 metawhere 或 metasearch 搜索计算字段的方法?我可以搜索除计算字段之外的任何字段。必须有办法。对于不熟悉元搜索或元位置的人来说,这里是一个 railscast。
问问题
668 次
1 回答
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) 的结果,一个数组,并且排序是在 Ruby 中使用 Enumerable 完成的,它速度较慢并且与数据库无关。
所以不,你不能使用 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")
于 2011-10-12T10:35:47.663 回答