【问题标题】:Wrong url in paginate (kaminari) for search with %使用 % 进行搜索的分页(kaminari)中的 url 错误
【发布时间】:2012-12-23 20:18:08
【问题描述】:

我在搜索页面上有分页(kaminari),如果我用 % 搜索类似“50% 折扣”的东西,我会得到页面 http://some.domain.com/50%25+discount,其中分页有错误的网址(没有转义 %),例如: http://some.domain.com/50%+discount?page=2

我做错了吗?还是 gem 中的错误?

谢谢

【问题讨论】:

    标签: ruby-on-rails kaminari


    【解决方案1】:

    % 是 url 中的特殊字符,不是吗?您将需要您的搜索方法在将查询传递到 url 之前对其进行清理。

    我相信您可以使用 gem Stringex 中提供的 String 类的方法来清理搜索词。

    https://github.com/rsl/stringex

    从那里 github 页面。

    "10% off if you act now".to_url => "10-percent-off-if-you-act-now"
    

    编辑:

    你需要有这样的东西(这不是很干净,但它给你一个想法)

    class SearchesController < ApplicationController
      def new
         #Form in its view that goes to create via json
      end
    
      def create
         query = params[:query].to_url
         redirect_to "/search/#{query}"
      end
    
      def show
        #search paged on params[:query]
      end
    
    end
    

    路线

    resources :searches, :only => [:new, :create, :show], :new => ""
    get "/search" => "searches#new", :via => :get
    

    您会表现得像对待普通对象一样对待它,但实际上从未真正保存它。如果需要,您甚至可以更改 :create 方法的名称以进行解析,但这样内置的 rails 帮助器和逻辑将起作用。

    【讨论】:

    • 感谢您提供不同的解决方案。可能我会使用它,如果错误在几天内无法修复。
    • 尝试在 google 中搜索“如果你现在采取行动可享受 10% 折扣”,它通常会避开此查询
    • 它有更多的元代码,但这就是重点。它不是 kaminari 的错误。 % 在网址中不安全。因此,将 1 传递给 url 会导致问题,因此您必须以某种方式使其安全,就像上面一样。
    【解决方案2】:

    我的解决方案是

    paginate @entities, :params =&gt; { :keyword =&gt; CGI.escape(@keyword) }

    route.rb我有

    match "/:keyword" =&gt; "route#index", :keyword =&gt; /.*/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2011-07-06
      • 2012-11-12
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多