我有资源路线
resources :favorites
但是我想要一个请求
/favorites?sort_by=name
/favorites?sort_by=date
/favorites?sort_by=number
如何限制在请求中仅使用名称,日期,数字?
我试过了
resources :favorites, :constraints => {:sort_by => /name|date|number/}
但它不起作用。
提前致谢。
答案 0 :(得分:1)
在routes.rb中放置以下代码
resources :favorites do
member do
get :sort_by, constraints: {id: /name|date|number/}
end
end
它会生成
sort_by_favorite GET /favorites/:id/sort_by(.:format) favorites#sort_by {:id=>/name|date|number/}
在“/ favorites /:id / sort_by”网址中,代替:id,您可以传递'name'或'date'或'number'。但我想,这不是你想要的。
所以,如果你想要以下网址
/favorites?sort_by=name
/favorites?sort_by=date
/favorites?sort_by=number
然后你必须在收藏夹控制器的索引操作中写一些条件。
def index
if ['name', 'date', 'number'].include?(params['sort_by'])
# your code goes here
else
# redirect to some where with error message
end
end
希望它对您有用:)
答案 1 :(得分:0)
路由约束未针对查询字符串进行测试。
在sort_by上创建自定义路由,并使其成为路由的一部分。或者在控制器中限制它。