0

我有资源路线

resources :favorites

但我想有一个请求

/favorites?sort_by=name
/favorites?sort_by=date
/favorites?sort_by=number

如何限制请求中仅使用姓名、日期、数字字词?

我努力了

resources :favorites, :constraints => {:sort_by => /name|date|number/}

但它不起作用。

提前致谢。

4

2 回答 2

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" URL 中,代替 :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

希望它对你有用:)

于 2013-06-26T09:05:26.450 回答
0

路由约束不针对查询字符串进行测试。

在 sort_by 上创建自定义路线,并使其成为路线的一部分。或将其约束在控制器中。

于 2013-06-26T09:14:21.647 回答