2014-06-06 27 views
1

看似簡單的問題。生成ActiveRecord :: Relation沒有任何方法或使用`all()`

我試圖從模型中構建一個ActiveRecord::Relation對象,而不使用像where()這樣的方法。例如:

@people = Person 

@people.where(status: 'active') if params(:active) 
@people.where(is_smoker: true) if params(:smokers) 

return @people 

你可以看到,如果沒有activesmokers在params爲設定,@people僅僅是模型,而不是ActiveRecord::Relation

我可以在return @people的末尾輸入all,但必須有更好的方法。

想法?

回答

2

可以使用.scoped方法:

@people = Person.scoped 

@people.where(status: 'active') if params(:active) 
@people.where(is_smoker: true) if params(:smokers) 

return @people 

還有基本上做同樣的事情,而忽略所有default_scopes定義的.unscoped method


軌道4,5:該方法.scoped已過時,看到@ FrederickCheung的答案

+0

最快的答案。布拉沃和謝謝。 –

+0

你回答得太快了,我甚至不能再接受3分鐘。 –

+0

啊哈這是一個簡單的問題,如果我想得到代表,我必須快速回答! – MrYoshiji

2

在軌道上3.X,scoped是要走的路。然而,它在軌道4,5否定並取消對Rails 4.1

爲Rails 4.0和更高版本,all只返回一個範圍,所以你會寫,而不是我見過

@people = Person.all 
@people.where(status: 'active') if params(:active) 
@people.where(is_smoker: true) if params(:smokers) 

return @people 
+0

對未來版本的導軌非常瞭解。我很高興他們在4.x中處理'all()'。 –

相關問題