ruby方法范围和DRY

时间:2013-10-10 11:25:39

标签: ruby methods scope

  def ads
    @ads = @search.result.recent.completed.paginate(page: params[:page], per_page: 10).limit(10)
  end

  def events
    @events = @search.result.recent.completed.paginate(page: params[:page], per_page: 10).limit(10)
  end

  def pets
    @pets = @search.result.recent.completed.paginate(page: params[:page], per_page: 10).limit(10)
  end

  def companies
    @companies = @search.result.recent.completed.paginate(page: params[:page], per_page: 10).limit(10)
  end

如何将此代码重构为某个范围

1 个答案:

答案 0 :(得分:1)

目前尚不清楚您真正要归档的内容。在不知道上下文的情况下,我会将您的代码重写为以下内容:

%w( ads events pets companies ).each do |name|
  class_eval <<-END_OF_RUBY, __FILE__, __LINE__ + 1

    def #{name}
      @#{name} = search
    end

  ENF_OF_RUBY
end

private 
  def search
    @search.result.recent.completed.paginate(page: params[:page], per_page: 10).limit(10)
  end