Rails 使用元搜索和元位置搜索计算字段

发布于 2024-11-30 02:46:28 字数 254 浏览 0 评论 0原文

有没有人能够找到一种方法来使用 Rails 3 中的metawhere 或metasearch 来搜索计算字段?我可以搜索除计算字段之外的任何字段。必须有办法。对于任何不熟悉元搜索或元地方的人,这里有一个railscast。

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

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.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

客…行舟 2024-12-07 02:46:28

Metawhere(现在的 Squeel)扩展了 ActiveRecord 的 Arel 实现,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 on

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")

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 :

@user.order("birthday").to_sql #=> SELECT users.* FROM users ORDER BY birthday

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

def age
  date.today - birthday
end

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")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文