将GET请求重写为不同的格式

时间:2015-08-20 18:39:15

标签: ruby-on-rails forms get request

我有一个搜索表单,它接受一个参数并将GET请求发布到外部URL。

  .form-group.form-group-sm
    %form{"accept-charset" => "UTF-8", :action => "http://example.com/search/node", :method => "get"}
      %input.form-control{name: 'search_query', placeholder: "Search site...", :type => "text"}
      %button{name: nil}
        %span.glyphicon.glyphicon-search

问题是外部网站需要GET请求以这种格式出现:

http://example.com/search/node/banana%20%orange

但书面表格会生成以下网址:

http://example.com/search/node/?search_query=banana+orange

任何人都可以分享有关如何更改GET请求的任何提示,以便将其格式化为正确的URL吗?谢谢!

2 个答案:

答案 0 :(得分:2)

我向内部网址发出请求,然后通过本地控制器#action重定向到外部网址。这也适用于跟踪搜索。

创建example_controller。添加搜索'行动。处理params解析和重定向。将示例#search添加到您的路线文件中。

像Linkedin,Yelp,Google这样的网站会为所有外部链接执行此操作。

一些帮助的代码

# app/controllers/yahoo_controller.rb
class YahooController < ApplicationController

  def search
    redirect_to escaped_url(:p => params[:q])
  end

  private

  def escaped_url(params = {})
    uri = URI('https://search.yahoo.com/search')
    uri.query = params.to_query
    uri.to_s
  end

end

和路线

get :yahoo_search, :to => 'yahoo#search'

和视图

= form_tag(yahoo_search_path, :method => :get) do
  = text_field_tag :q, params[:q]
  = submit_tag "Search", :name => nil

答案 1 :(得分:0)

您可以编写一个将在表单提交时调用的JS函数。在该函数中,您可以使用所需格式将参数附加到GET URL,然后发出GET请求。