Rails用不需要的参数搜索URI?

时间:2014-07-16 04:44:36

标签: ruby-on-rails ruby twitter-bootstrap

背景

我在标题中创建了一个搜索字段。我认为这段代码:

<% if signed_in? %>
    <%=f orm_tag( "/search", method: "get", :class=>"navbar-form navbar-left", :role => "search") do %>
        <div class="form-group">
            <%=t ext_field_tag :q, nil, :class=>"form-control", :placeholder => 'Domain/IP Search' %>
        </div>
        <%=b utton_tag "Search", :type=>'submit', :class=> "btn btn-primary" do %>
        <span class="glyphicon glyphicon-search"></span>
    <% end %>
<% end %>

创建此输出:

<form accept-charset="UTF-8" action="/search" class="navbar-form navbar-left" method="get" role="search">
    <div style="display:none">
        <input name="utf8" type="hidden" value="✓">
    </div>
    <div class="form-group">
        <input class="form-control" id="q" name="q" placeholder="Domain/IP Search" type="text">
    </div>
    <button class="btn btn-primary" name="button" type="submit">
        <span class="glyphicon glyphicon-search"></span>
    </button>
</form>

这是一张图片:

search field

问题

问题是当我搜索时,我会在我的网址中找到它:

/search?utf8=✓&q=test&button=

理想情况下,我希望它更像是:

/search?q=test

TL; DR:

如何摆脱按钮参数(希望也可以删除按钮参数)。

额外信息:

的routes.rb

resources :search

search_controller.rb

class SearchController < ApplicationController
  def index
    @results = params[:q]
    puts @results.to_s
  end
end

搜索\ index.html.erb

<%=@results.to_s %>

编辑,回答

添加这个,因为虽然接受的答案帮助我找到解决方案;它没有我的情况的确切代码。我做了这些改变:

1)路线:

match '/search',          to: 'search#index',         via: 'post'

2)表格在我的标题中:

        <%= form_tag search_path, method: "post", :class => "navbar-form navbar-left", :id=> "SearchForm", :role => "search" do %>
        <div class="form-group">
            <%= text_field_tag :q, nil, :class => "form-control", :placeholder => 'Domain/IP Search' %>
        </div>
        <%= button_tag "Search", :type=> 'submit', :class=> "btn btn-primary" do %>
        <span class="glyphicon glyphicon-search"></span>
    <% end %>
<% end %>

3 个答案:

答案 0 :(得分:1)

如果您没有使用Utf8参数,但Rails是&amp;但它需要。这是为了纠正IE的参数编码中的一些问题,这个参数被添加到表单中,以强制Internet Explorer 5,6,7和8将其参数编码为unicode.Its修复了IE的编码问题。

请参阅以下链接:

What is the _snowman param in Ruby on Rails 3 forms for?

答案 1 :(得分:1)

获取

正如我在另一个答案中写的那样,底线是you're using GET

enter image description here

基本上,当您提交GET表单时,它会将参数附加到您的网址,而POST表单会将数据附加到请求正文(或隐藏的某处)。

区别在于GET请求需要立即返回的响应,因此您必须传递URL中的参数以确保服务器知道如何构造它。最好的示例是如果您使用GET请求加载页面。

POST方法主要用于表单,其中不会立即响应;从而允许你将params隐藏在请求中。


<强>修正

我们实际上已经创建了一个基本搜索功能here(实际搜索由于某种原因不起作用,但实时搜索确实如此)

我们这样做的方式如下:

match 'search(/:search)', :to => 'products#search', :as => :search, via: [:get, :post]

首先,您可以通过输入domain.com/search/your-query-here

来访问搜索操作

在通过表单提交方面,您将能够使用JQuery通过文本字段的输入修改URL:

#app/views/elements/_nav.html.erb
<%= form_tag search_path, :method => :post, :id => "SearchForm" do %>
        <%= text_field_tag :search, params[:search], placeholder: 'Search your favourite products or brands', :autocomplete => :off, :id => 'SearchSearch'  %> 
        <%= image_submit_tag('nav_bar/search.png', title: 'Search', class: 'search_submit', data: { "placement" => "bottom" }) %>
<% end %>  

#app/assets/javascripts/application.js
//Search Submit
$(document).ready(function() {
    $('#SearchForm').submit(function(e) {
        e.preventDefault();

        if( $('#SearchSearch').val().length > 0 ) {
            var search_params = '/' + $('#SearchSearch').val().toLowerCase();
        }else{
            var search_params = ''
        }

        window.location.href = $(this).attr('action') + search_params
    });
});

答案 2 :(得分:0)

此参数是rails的一项功能。

以前是雪人。

它帮助IE真正使用utf-8。

避免使用form_tag,它可以工作:

<form action="<%= search_path %>" method="get" >
  <%= text_field_tag 'query' %>
  <%= submit_tag "Search", :name => nil%>
</form> 

现在根据需要设置表单样式