10

カミナリのURL生成では、最初のページに戻るリンクを生成している場合、ページパラメータが省略されます。ただし、アプリケーションは、ページパラメータが省略された場合にランダムなページを選択するように設計されています。したがって、カミナリのデフォルトの動作では、信頼できる方法で最初のページにページを戻すことができません。

私はこの問題を解決し、少し後で解決策を投稿しますが、後世のためにこの質問を投稿したいと思いました。また、Railsはかなり新しいので、自分の解決策が最善か、ほとんどかわかりません。エレガントで、私自身の利己的な啓蒙のためだけなら、改善と改良に興味があります!

4

4 に答える 4

14

変更したい動作を実装するKaminariのコード行はlib/kaminari/helpers/tags.rb、メソッド内にありKaminari::Helpers::Tag::page_url_forます。

  def page_url_for(page)
    @template.url_for @template.params.merge(@param_name => (page <= 1 ? nil : page))
  end

この動作をオーバーライドするためにlib/kaminari/helpers/tag.rb、次のファイルを作成しました。

module Kaminari
  module Helpers
    class Tag
      def page_url_for(page)
        @template.url_for @template.params.merge(@param_name => (page < 1 ? nil : page))
      end
    end
  end
end

次に、次の行を追加してファイルにパッチを適用しましたconfig/initializers/extensions.rb

require "lib/kaminari/helpers/tag.rb"

Ruby / Railsの用語に不便を感じたことをお詫びしますが、私はまだRubyにかなり慣れていません。コメントや批判は大歓迎です。

于 2011-03-30T17:01:12.553 に答える
8

アップデート

kaminariソースの新しいバージョンでは、更新された行としてこれが必要になります。

@template.url_for @params.merge(@param_name => (page))

そうしないと、ページネーション呼び出しに渡された他のパラメーターが失われます。

わかりやすくするために、ここに新しいコードの完全な出力があります。

module Kaminari
  module Helpers
    class Tag
      def page_url_for(page)
        @template.url_for @params.merge(@param_name => (page))
      end
    end
  end
end

Danielが提案したように、これは初期化ファイル内に配置します。

于 2012-07-27T21:57:26.900 に答える
6

本日(2016年7月)の時点で、Kaminariマスターブランチにはデフォルトで設定オプション が含まれています。params_on_first_pagefalse

この設定オプションをに設定するtrueと、ページ1を含むすべてのページのページパラメータが含まれます。

マスターブランチは安定したリリースではないことに注意してください。注意して使用してください。

于 2016-07-30T16:57:08.720 に答える
2

これは、これを書いている2018年の答えです:

kaminarigithubホームページに記載されているように

これを実行して、kaminariの構成ファイルを作成します。

rails g kaminari:config

これにより、config/initializersフォルダーにkaminari_config.rbファイルが作成されます。

行のコメントを外し、config.params_on_first_page = falsefalseをtrueに置き換えます:

config.params_on_first_page = true

必要に応じてサーバーを再起動します。それでおしまい :)

于 2018-02-01T12:55:35.463 に答える