2011-08-17 45 views
5

任何人都可以找到一种方法来使用轨道3中的metawhere或metasearch搜索计算字段?我可以搜索任何字段,但计算字段。必须有一种方法。对于不熟悉metasearch或metawhere的人来说,这里是一个railscast。Rails使用元搜索和元数据搜索计算字段

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

+0

你的意思是不是存储在数据库中,并定义模型,而不是字段? –

+0

是的,请解释一下你的意思? –

+0

通过计算字段,你是指在模型中定义的虚拟参数,是从数据库表列中计算出来的?我不认为你可以搜索那些使用这些宝石的人,因为搜索最终会分解到数据库级别。 – rubyprince

回答

1

Metawhere(现Squeel)扩展的ActiveRecord的实现阿雷尔的是一种SQL生成。这意味着它会变成一些语句在SQL如:

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

当你做User.find(:all).sort_by(&:age)你在一个工作发现的结果(:所有),数组和排序的红宝石可枚举做这速度较慢,并且与数据库无关

所以,不,你不能

def age 
    date.today - birthday 
end 

,除非你把结果存储在数据库中使用Metawhere。

但是您可以使用COUNT AVG MAX等SQL语句与GROUP和HAVING直接对数据库进行计算。

User.select("users.*, COUNT(user_id) AS vote_num").joins(:votes).group("user_id")