【问题标题】:Why am I getting weird parameters in my search url?为什么我的搜索网址中出现奇怪的参数?
【发布时间】:2018-02-13 02:22:12
【问题描述】:

我正在执行搜索,其中传递了两个隐藏参数:

:sort and :direction

当我进行搜索时,我得到:

http://localhost:3000/resource?utf8=%E2%9C%93&direction=%7B%3Avalue%3D%3E%22asc%22%7D&sort=%7B%3Avalue%3D%3E%22rentalminimum%22%7D&startdate=&near=tempe&radius=&min=&max=&commit=Search

检查参数,我看到我得到了未经许可的参数 utf8,最重要的是我得到了

{:value => "\rentalminimum"\}  and not {:value => "rentalminimum"}

我应该如何将这些参数删除为%7B%3Avalue%3D%3E%22 从我的搜索网址。换句话说,我如何清理我的参数以仅包含搜索参数和方向以及排序列名称?

Resource.search(params)

我试过脱衣舞!但它不会直接在参数上工作。

我的搜索表单:

<%= bootstrap_form_for listings_path, :method => 'get' do %>

        <%= hidden_field_tag :direction, :value => params[:direction] %>
        <%= hidden_field_tag :sort,:value => params[:sort] %>



        <div class= "col-sm-12 col-lg-12 col-md-12" style = "margin: auto;">
            <h6 style = "color:#7C064D;"><strong> PICK A DATE  <span class="glyphicon glyphicon-calendar"></span></strong>
            <%= date_field_tag :startdate, params[:startdate], placeholder: 'DATE' %>           
            </h6>
        </div>  

        <div class= "col-sm-12 col-lg-12 col-md-12" style = "margin: auto;">    
        <p>     
            <%= text_field_tag :near, params[:near], placeholder: ' Destination' %>
            <%= text_field_tag :radius, params[:radius], placeholder: ' Search Radius' %>
        </p>
        </div>      
        <div class= "col-sm-12 col-lg-12 col-md-12" style = "margin: auto;">    
        <p>     
            <%= text_field_tag :min, params[:min], placeholder: ' Minimum Rate Per Hour' %>
            <%= text_field_tag :max, params[:max], placeholder: ' Maximum Rate Per Hour' %>
        </p>
        </div>

        <div class= "col-sm-12 col-lg-12 col-md-12" style = "margin-top: 10px;">        
            <%= submit_tag "Search", class: "btn btn-info", style: "width: 40%; background-color: #E20049; border: #e20049;" %>
            <%= link_to 'View All', root_path, class: "btn btn-info", style: "width: 40%; background-color: #E20049; border: #e20049;" %>
        </div>

        <!-- <div class= "col-sm-6 col-lg-6 col-md-6" style = "margin-top: 10px;">      

        </div> -->


    <% end %>

控制器动作:

def index
        if params.present?      
          flash[:notice] = "Please see Listings below"
          @listingssearch =  Listing.search(params)        
        else
          @listingssearch =  Listing.all      
        end

        @listingsboats = @listingssearch.where(:vehicletype => 'Boat').order(sort_column + " " + sort_direction).paginate(:page => params[:page], :per_page => 30)

        # @listingsrvs = Listing.search(params)
        @listingsrvs = @listingssearch.where(:vehicletype => 'RV').order(sort_column + " " + sort_direction).paginate(:page => params[:page], :per_page => 30)

        # .page(params[:page]).per_page(4)    
      end

可排序助手:

 def sortable(column, title = nil)
      title ||= column.titleize
      css_class = column == sort_column ? "current #{sort_direction}" : nil
      direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"      
      # link_to title, request.params.merge({:sort => column, :direction => direction, :page => nil}), {:class => "css_class" }
      link_to title, params.permit(:min, :max, :radius, :startdate, :near).merge({:sort => column, :direction => direction, :page => nil}), {:class => "css_class" }
    end

排序链接:

<div class= "col-sm-12 col-lg-12 col-md-12" style = "text-align: center; padding: 10px;">

    <div class= "col-sm-3 col-lg-3 col-md-3" style = " padding: 5px;">
        <%= sortable "rentalminimum", "SORT BY RENTAL MINIMUM" %>
    </div>

    <div class= "col-sm-3 col-lg-3 col-md-3" style = " padding: 5px;">
        <%= sortable "rateperhour", "SORT BY RATE PER HOUR" %>
    </div>  

    <div class= "col-sm-3 col-lg-3 col-md-3" style = " padding: 5px;">
        <%= sortable "length", "SORT BY LENGTH" %>
    </div>
    <div class= "col-sm-3 col-lg-3 col-md-3" style = " padding: 5px;">
        <%= sortable "sleeps", "SORT BY SLEEPS" %>  
    </div>
</div>

【问题讨论】:

  • 您可能需要包含您的视图和控制器代码。
  • 添加了所有必要的代码

标签: ruby-on-rails search utf-8 parameters search-form


【解决方案1】:

我认为这里可能遗漏了一些东西......

  • hidden_field_tag 在用户看不到的页面上引入了 &lt;input&gt; 元素。它不会影响其值如何被发送回服务器。我不认为你的人实际上在做任何事情。
  • 链接(在sortable 方法中)无论如何都会绕过表单及其输入,只是将您链接到一个页面。它所指的params 将是与加载页面的请求一起发送的那些(当然,这可能是您想要的)。
  • GET 请求将它们的参数发送回 URL。如果您不希望这种情况发生,您需要通过不同的 HTTP 方法发送请求 - POST 可能是最合适的。我不确定链接是否可以做到这一点 - 他们可能会接受 method: :post 作为选项 - 或者您是否需要使用表单的提交按钮。

但是,您说您只想从 URL 中删除 value 垃圾?我认为 归结为 hidden_field_tag 参数。如果我没记错的话,第二个应该是字段的值,而不是选项哈希。试试:

<%= hidden_field_tag :direction, params[:direction] %>

至于utf8参数,there is a reason it's there

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多