我在标题中创建了一个搜索字段。我认为这段代码:
<% 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?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 %>
答案 0 :(得分:1)
如果您没有使用Utf8参数,但Rails是&amp;但它需要。这是为了纠正IE的参数编码中的一些问题,这个参数被添加到表单中,以强制Internet Explorer 5,6,7和8将其参数编码为unicode.Its修复了IE的编码问题。
请参阅以下链接:
答案 1 :(得分:1)
获取强>
正如我在另一个答案中写的那样,底线是you're using GET
:
基本上,当您提交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>
现在根据需要设置表单样式