Rails 使用元搜索和元位置搜索计算字段
有没有人能够找到一种方法来使用 Rails 3 中的metawhere 或metasearch 来搜索计算字段?我可以搜索除计算字段之外的任何字段。必须有办法。对于任何不熟悉元搜索或元地方的人,这里有一个railscast。
Has anyone been able to find a way to search a calculated field using metawhere or metasearch in rails 3? I can search any field but calculated fields. There has to be a way. For anyone not familiar with metasearch or metawhere here is a railscast.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Metawhere(现在的 Squeel)扩展了 ActiveRecord 的 Arel 实现,Arel 是一个 SQL 生成器。这意味着它将转换 SQL 中的某些语句,例如:
当您执行
User.find(:all).sort_by(&:age)
时,您正在处理 find(:all) 的结果,一个数组,排序是在 Ruby 中使用 Enumerable 完成的,它速度较慢并且与数据库无关。您不能使用 Metawhere on
所以不,除非将结果存储在数据库中,否则
。 但是您可以使用诸如 COUNT AVG MAX 等 SQL 语句与 GROUP 和 HAVING 直接在数据库上进行计算。
User.select("users.*, COUNT(user_id) AS vote_num").joins(:votes).group("user_id")
Metawhere (now Squeel) extends ActiveRecord's implementation of Arel which is a SQL generator. That means it will turn some statement in SQL e.g :
When you do
User.find(:all).sort_by(&:age)
you are working on a the result of find(:all), an Array, and the sorting is done in Ruby with Enumerable which is slower and has nothing to do with the database.So no, you cannot use Metawhere on
unless you store the result in the database.
However you can use the SQL statements like COUNT AVG MAX etc with GROUP and HAVING to do calculation directly on the database.
User.select("users.*, COUNT(user_id) AS vote_num").joins(:votes).group("user_id")