将表单输入附加到外部网址

时间:2015-08-20 14:39:03

标签: ruby-on-rails forms post haml

我觉得我在这里缺少一些非常简单的东西。我在Rails 4应用程序上有一个搜索表单,它接受输入的关键字,然后需要将它们附加到外部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/”。

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

1 个答案:

答案 0 :(得分:0)

我建议您使用'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 Hack点击提交按钮/按回车后改变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;"}