use*_*447 5 ruby ruby-on-rails meta-where
有没有人能够找到一种方法来使用rails 3中的metawhere或metasearch搜索计算字段?我可以搜索任何字段但计算字段.必须要有办法.对于不熟悉元搜索或metawhere的人来说,这里是一个railscast.
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")
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |