【发布时间】:2018-12-07 16:15:36
【问题描述】:
我想在我的路由中添加另一个显式查询参数。
现在,我有这个:
Rails.application.routes.draw do
scope :format => true, :constraints => {:format => :json} do
get 'proxies/random(?type=:proxy_type)' => 'proxies#random'
我想做的是再添加一个(?origin=:origin) 查询参数。
我只是找不到任何文档或示例。
我相信我应该有这样的东西:
Rails.application.routes.draw do
scope :format => true, :constraints => {:format => :json} do
get 'proxies/random(?type=:proxy_type&origin=:origin)' => 'proxies#random'
或者这个:
Rails.application.routes.draw do
scope :format => true, :constraints => {:format => :json} do
get 'proxies/random(?type=:proxy_type)(?origin=:origin)' => 'proxies#random'
这样做的正确方法是什么?
顺便说一句,这是我在控制器中所做的:
[...]
before_filter :find_randomly, only: :random
[...]
def find_randomly
if params[:origin].nil? or params[:origin].blank?
relation = ProxiesCatalogueProxy.where(blacklisted: false)
else
relation = ProxiesCatalogueProxy.where(blacklisted: false, origin: params[:origin])
end
@proxy = if params[:type].nil? or params[:type].blank?
relation.order("RAND()").first
else
relation.where(proxy_type: params[:type]).order("RAND()").first
end
end
另外,有人可以提供关于这个主题的任何好的资源/材料吗? 谢谢。
【问题讨论】:
-
对于查询字符串,你不需要编写路由定义。无论你传递什么都是available in the
params。您当然可以使用permit方法将不需要的查询字符串参数列入黑名单。 -
有点像XY Problem。你想做什么?
-
@ArupRakshit 假设我没有为类型和来源添加显式声明......如果我只是点击路线“代理/随机”(无参数)不会引发某种异常吗?因为,在控制器中我已经有如下语句:“if params[:origin].nil? or params[:origin].blank?”和“如果 params[:type].nil? 或 params[:type].blank?”期望来源和类型参数。
标签: ruby-on-rails ruby api routes