我正在使用Rails 5.1创建一个简单的搜索,该搜索在表单中使用单个文本字段,该表单从SQLITE3数据库获取数据并在新HTML页面上的表中返回数据。搜索表单是一种渲染形式,它将搜索值传递给控制器
index.html.erb
<%= render 'search', foo: @foo %>
_search.html.erb
<div>
<%= form_tag(search_home_index_path, :method => 'get', id: 'search_form') do %>
<%= text_field_tag :search, params[:search], id: 'search_field', placeholder: "Search", :required => 'required'%>
<%= submit_tag("Search", :class => "button", :name => nil) %>
<% end %>
</div>
application_record.rb
def self.search(search)
where("(foo) LIKE ?", "%#{search}%")
end
home_controller.rb
def search
if params[:search]
@foo = Foo.search(params[:search]).order("id ASC")
else
@foo = Foo.all.order("id ASC")
end
end
搜索工作正常并返回值。但是,(我相信这是因为我在多个页面上呈现相同的表单),当搜索返回时,text_field_tag值保留在原始页面上输入的搜索条件,并在新页面的text_field_tag中填充相同的值。我试图使用JavaScript来使用
清除text_field_tagdocument.getElementById('search_field').value='';
作为
中的函数<body onload...
但它不起作用 - text_field_tag保留该值。我也尝试过使用
document.getElementById('search_form').reset();
但最终会在我的搜索变量中发送一个空白值并返回数据库中的所有项目。
我已经看到了一些关于将字段值的代码放在Coffee脚本中的引用,但我不确定如何实现它(我已经编写了Ruby总共大约2个月)。< / p>
任何建议都将不胜感激!
答案 0 :(得分:0)
实际上,您是在表单中设置此值的人。您可以将其设置为nil,就像这样;
<%= text_field_tag :search, nil, id: 'search_field', placeholder: "Search", :required => 'required'%>
可以找到text_field_tag的文档here。