2011-08-17 124 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")