Ruby on rails Rails使用metasearch和metawhere搜索计算字段

Ruby on rails Rails使用metasearch和metawhere搜索计算字段,ruby-on-rails,ruby,meta-where,Ruby On Rails,Ruby,Meta Where,有没有人能够在rails 3中找到使用metawhere或metasearch搜索计算字段的方法?我可以搜索除计算字段以外的任何字段。一定有办法的。对于不熟悉元搜索或元搜索的人,这里是railscast Metawhere(现在是squel)扩展了ActiveRecord对SQL生成器Arel的实现。这意味着它将转换SQL中的某些语句,例如: @user.order("birthday").to_sql #=> SELECT users.* FROM users ORDER BY birt

有没有人能够在rails 3中找到使用metawhere或metasearch搜索计算字段的方法?我可以搜索除计算字段以外的任何字段。一定有办法的。对于不熟悉元搜索或元搜索的人,这里是railscast

Metawhere(现在是squel)扩展了ActiveRecord对SQL生成器Arel的实现。这意味着它将转换SQL中的某些语句,例如:

@user.order("birthday").to_sql #=> SELECT users.* FROM users ORDER BY birthday
当您执行
User.find(:all).sort by(&:age)
时,您正在处理find(:all)的结果,一个数组,排序是在Ruby中使用Enumerable完成的,Enumerable速度较慢,与数据库无关

因此,不能在上使用Metawhere

def age
  date.today - birthday
end
除非将结果存储在数据库中

但是您可以将COUNT AVG MAX等SQL语句用于GROUP,并且必须直接在数据库上进行计算


User.select(“users.*,COUNT(User\u id)AS vote\u num”)。join(:votes)。group(“User\u id”)

您是指未存储在数据库中,而是在模型中定义的字段吗?是的,请解释您所说的计算字段是什么意思?所说的计算字段,您是指模型中定义的、从数据库表列计算的虚拟参数吗?我不认为你可以用这些gem来搜索,因为搜索最终会分解到数据库级别。我指的是模型中定义的字段。它们是我数据库中实际存储的字段,但我在模型中有一个方法,该方法使用其他几个字段的乘积填充它。有没有办法搜索这些?我知道可以在控制器@user=user.find(:all).sort_by(&:age)中使用下面的语句对它们进行排序,在这种情况下,age可以是date.today-birth