如果属性为null,我怎么能不使用范围

时间:2012-08-18 01:01:48

标签: activerecord ruby-on-rails-3.2 dry

我的控制器中有以下内容:

  @filt= params[:filter] || 'no_filter'
if params[:subcategory].nil? || params[:subcategory] == "null"
  @resources = Resource.find_by_category(params[:category]).approved.send(@filt).page(params[:page]).per(30)
else
  @resources = Resource.find_by_category(params[:category]).find_by_subcategory(params[:subcategory]).approved.send(@filt).page(params[:page]).per(30)
end

我想减少此代码,以便我不重复?

1 个答案:

答案 0 :(得分:0)

@filt= params[:filter] || 'no_filter'
r = Resource.find_by_category(params[:category])
r = r.find_by_subcategory(params[:subcategory]) unless [nil, 'null'].include? params[:subcategory] 
@resources = r.approved.send(@filt).page(params[:page]).per(30)

您不必将所有内容放在链接作用域的一行中,例如Model.scope1.scope2等。您可以通过s = Model.scope1; s = s.scope2执行此操作,如上面的代码示例所示。