rails 3资源路由中的附加参数约束

时间:2013-06-26 08:56:47

标签: ruby-on-rails ruby-on-rails-3 routing

我有资源路线

resources :favorites

但是我想要一个请求

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

如何限制在请求中仅使用名称,日期,数字

我试过了

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

但它不起作用。

提前致谢。

2 个答案:

答案 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上创建自定义路由,并使其成为路由的一部分。或者在控制器中限制它。