这是一个新的问题。我的Contents
模型具有content_type
属性。我有一些我想要过滤的不同content_types,通过URL传递类型:/ contents?content_type = blog
据我所知,我可以根据这个参数得到内容:
@contents = Content.where({:content_type => params[:content_type]})
但是当URL参数不存在时,它没有获得任何内容。我希望当没有传递URL参数时,将检索所有内容(不论类型)。我该怎么做?
答案 0 :(得分:3)
我会定义一个范围,就像这样(在你的模型中)
class Content
scope :by_content_type, lambda { |contenttype|
where({:content_type => contenttype}) unless contenttype.blank?
}
end
然后在控制器中使用它,如下所示:
@contents = Content.by_content_type(params[:content_type])
答案 1 :(得分:2)
这应该有效:
if params[:content_type].blank? @contents = Content.scoped else @contents = Content.where({:content_type => params[:content_type]}) end
答案 2 :(得分:1)
这里有一个合理的模式,使用一系列链式范围来缩小基于查询参数的过滤器:
@contents = Content.scoped # Start with no filter
# Optionally narrow filter if filter param is present
type = params[:content_type]
@contents = @contents.where(:content_type => type) if type
答案 3 :(得分:0)
@contents = Content.where({(:content_type => params[:content_type]} unless params[:content_type].blank?))