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にRESTfulリソースとしてpaginateを追加することでした。これにより、ルートヘルパーメソッドが自動的に提供されます:paginate_contacts_path

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

また、ContactsControllerに別のpaginateメソッドがあります

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 に答える