2013-12-20 70 views
0

我已經構建了一個Rails應用程序,我希望適應一個基於從移動應用程序請求的查詢返回結果的寧靜Web服務。該應用程序的功能需要啓用搜索,並且我已經在rails應用程序中使用了太陽黑子solr。用於搜索(各控制器內)的代碼是這樣:Rails Webservice - 如何傳遞搜索參數

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 

的主要問題是,每一個導軌的web服務教程只列出等非常不靈活的HTTP請求:GET /用戶/ {#},並執行你只需輸入用戶#。但對於應用程序,我需要傳遞不同的參數,注意方法頭:搜索(代碼,dow,句點)。

我需要更改哪些內容才能使應用響應並在使用某些URI的GET和POST請求時返回請求的信息。 /search...param...param...etc,可以允許我指定的方法頭部輸入參數?

+0

這或許有助於http://guides.rubyonrails.org/routing.html – devanand

回答

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 
+0

感謝,這應該是一個很好的起點 – Sauron

相關問題