我已经构建了一个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可以允许我指定的方法头输入参数吗?
答案 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