2014-06-06 34 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()'。 –

相关问题