将表单输入附加到外部 URL post

Append form input to external URL post

我觉得我在这里遗漏了一些非常简单的东西。我在 Rails 4 应用程序上有一个搜索表单,它接受输入的关键字,然后需要将它们附加到外部 URL。

如果输入的关键词是:"banana orange"

那么所需的 URL 将是:http://example.com/search/node/banana%20%orange

这是我在 HAML 中的当前表单:

 .form-group.form-group-sm
   %form{"accept-charset" => "UTF-8", :action => "http://example.com/search/node/", :method => "post"}
     %input.form-control{placeholder: "Search site...", :type => "text"}
     %input.form-control{:type => "submit"}

当我点击提交时,我被重定向到“http://example.com/search/node/”。

如何从附加到 URL 的表单中以正确的格式获取输入的参数?谢谢!

我建议您为此使用 'GET',而不是 'POST'。因为搜索动作主要是读取数据,并没有改变任何数据。

因此你想改变:

%form{"accept-charset" => "UTF-8", :action => "http://example.com/search/node/", :method => "post"}

进入

%form{"accept-charset" => "UTF-8", :action => "http://example.com/search/node/", :method => "get"}

在您的控制器中,您通过

访问banana%20orange
def search
  puts params[:search_query]
  # => this will show you "banana orange"
end

只需确保将 :search_query 更改为您在路由中传递的名称:

# routes.rb
# I.E you have the following
get '/search/node/:search_query' => 'controller_name#action_name'

相应地更改上面的 controller_name 和 action_name。

更新:

你也想改变

%input.form-control{placeholder: "Search site...", :type => "text"}

进入

%input.form-control{name: 'search_query', placeholder: "Search site...", :type => "text"}

或者我更喜欢:

= text_field_tag :search_query, placeholder: "Search site...", class: 'form-control'

更新

点击提交按钮/按回车后 Javascript 更改 URL 的小技巧(我想不出任何不涉及 JS 的方法来解决这个问题):

%form{"accept-charset" => "UTF-8", :action => "http://example.com/search/node/", :method => "get", onsubmit: "window.location.href=$(this).attr('action') + $('input[name=search-query]').val(); return false;"}