Rails - 获取内容但仅限于url param存在时

时间:2011-01-28 17:44:38

标签: ruby-on-rails

这是一个新的问题。我的Contents模型具有content_type属性。我有一些我想要过滤的不同content_types,通过URL传递类型:/ contents?content_type = blog

据我所知,我可以根据这个参数得到内容:

@contents = Content.where({:content_type => params[:content_type]})

但是当URL参数不存在时,它没有获得任何内容。我希望当没有传递URL参数时,将检索所有内容(不论类型)。我该怎么做?

4 个答案:

答案 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?))