Rails Webservice - 如何传入搜索参数

时间:2013-12-20 05:20:59

标签: ruby-on-rails web-services http solr

我已经构建了一个rails应用程序,我希望适应一个宁静的Web服务,该服务根据移动应用程序请求的查询返回结果。该应用程序的功能要求启用搜索,我已经在rails应用程序中使用了太阳黑子solr。搜索的代码(在相应的控制器内)是这样的:

    def search(code, dow, period)

    # performing the search as I want it
    @search = Sunspot.search(Camps) do

        fulltext code     

        with(dow).equal_to(true)

        with(period).equal_to(true)

        with(:is_active).equal_to(true)

        order_by :price, :desc
    end
    @search.results
end

主要问题是每个rails webservice教程只列出了非常不灵活的HTTP请求,例如:GET / user / {#},并执行你只需输入用户#。但对于应用程序,我需要传递不同的参数,注意方法头为:search(code,dow,period)。

在对某些URI使用GET和POST请求时,我需要更改以使应用程序响应并返回所请求的信息 即。 /search...param...param...etc可以允许我指定的方法头输入参数吗?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您需要查看routes以对其进行排序


<强> Non Resourceful Routes

你遇到的问题是你正在尝试处理路由中的变量,这不是典型的用例

Rails允许您通过路线发送任何类型的数据 - 这只是一个正确定义它们的案例

以下是我们实施基本搜索路由的方式:

#config/routes.rb
match 'search(/:search)', :to => 'products#search', :as => :search, via: [:get, :post]

#app/controllers/products_controller.rb
def search                 
    @products = Product.search(params[:search])
    respond_to do |format| --> handles different mime-types (HTML / JSON)
         format.js   { render :partial => "elements/livesearch", :locals => {:search => @products, :query => params[:search]} }
         format.html { render :index }
    end
 end

 #app/models/product.rb --> put your Solr stuff in here
 def self.search(search)
    basic_search(name: search, description: search).take(5)
 end