簡単に言えば
クエリ文字列パラメータを使用してオブジェクトのリストをフィルタリングする場合、Kaminariページネーションヘルパーのリンクが間違っています。
バックグラウンド
基本的な並べ替えをサポートするアクションがあり、LearningObjects#index
カミナリを介して自分自身とページ付けを実装しました。
並べ替えは、GETリクエストを実行する通常のフォームを使用して実行されます。
コントローラー:
class LearningObjectsController < AdministrationController
respond_to :json, :html
load_and_authorize_resource
# GET /learning_objects
# GET /learning_objects.json
def index
# Searching
if LearningObject.has_search_params(params)
@learning_objects = LearningObject.search(params)
end
# Pagination
@learning_objects = @learning_objects.page(params[:page]).per(params[:per])
respond_with @learning_objects, serializer: LearningObjectPageSerializer, total_records: @learning_objects.total_count
end
# other actions...#
end
景色
%h1= t("actions.learning_object.index")
.well
%h4= t("actions.filter")
= form_tag(learning_objects_path, method: :get, class: "form-search") do
= select_tag :subject_id,
options_from_collection_for_select(@subjects, "id", "name", params[:subject_id].to_i),
prompt: t("activerecord.models.subject")
= select_tag :stage_id,
options_from_collection_for_select(@stages, "id", "name", params[:stage_id].to_i),
prompt: t("activerecord.models.stage")
= text_field_tag :free_text, params[:free_text], placeholder: t("actions.write_something")
= submit_tag t("actions.filter"), class: :btn
= link_to t("actions.clear"), learning_objects_path, class: :btn
%p= t("actions.learning_object.show_number", count: @learning_objects.total_count, total: @total)
= paginate @learning_objects
= table_for @learning_objects do |t|
= t.data actions: :all do
=t.cell(:name) {|l| link_to l, l}
=t.cell(:downloads) {|l| "#{l.downloads} #{t("misc.times", count: l.downloads)}"}
=t.cell(:language)
=t.cell(:active) {|l| tag("i", class: l.active ? "icon-ok" : "") }
= link_to t("actions.learning_object.new"), new_learning_object_path
問題
フォームを使用してLearningObjectsをフィルタリングすると、カミナリによって生成されたページネーションリンクがすべて奇妙になります。
たとえば、住所が次のようになっている場合:http://localhost:3000/learning_objects?utf8=%E2%9C%93&subject_id=&stage_id=&free_text=obj&commit=Filtrera
次に、ページネーションリンクは次のようになります。http://localhost:3000/subjects//learning_objects?commit=Filtrera&free_text=obj&page=2&stage_id=&utf8=%E2%9C%93
ページネーションリンクは次のようになります。http://localhost:3000/learning_objects?utf8=%E2%9C%93&subject_id=&stage_id=&free_text=obj&commit=Filtrera&page=2
質問
検索文字列に検索語が含まれているのに、カミナリがこれらの不正な形式のネストされたリンクを生成するのはなぜですか?