1

我的 rails 项目正在对 HTML 格式进行分页,而不是对其他格式进行分页。有人可以建议一种更优雅的方法来处理获取@contacts 集合的差异吗?也许分页版本应该是只支持HTML的不同方法?

def index
  if request.format.to_sym == :html
    @contacts = Contact.paginate(page: params[:page]).search(params[:search])
  else
    @contacts = Contact.search(params[:search])
  end      

  respond_to do |format|
    format.html { render html: @contacts }
    format.mobile { render mobile: @contacts }
    format.json { render json: @contacts }
    format.xml { render xml: @contacts.to_xml }
  end
end

我的解决方案是在 routes.rb 中添加 paginate 作为 RESTful 资源,它会自动为我提供路由辅助方法:paginate_contacts_path

resources :contacts do
  collection do
    get 'paginate'
  end
end

并在 ContactsController 中有一个单独的分页方法

def index
  @contacts = Contact.search(params[:search])

  respond_to do |format|
    format.html { render html: @contacts }
    format.mobile { render mobile: @contacts }
    format.json { render json: @contacts }
    format.xml { render xml: @contacts.to_xml }
  end
end

def paginate
  @contacts = Contact.paginate(page: params[:page]).search(params[:search])

  respond_to do |format|
    format.html
  end
end
4

1 回答 1

0

强烈喜欢使用单独的方法,因为这会产生不稳定性并使作品的可测试性降低。此外,在例如文档中,您还需要创建异常。

另一种方法是使用一些参数来处理这个问题。现在它突然(当您只更改视图时)返回不同的数据。对于未知的开发人员来说,这可能看起来像是一个错误,并且可能会引发问题。

所以不要做神奇的事情,清除参数或单独的方法。

于 2012-06-14T16:25:18.983 回答