Ruby on rails Rails 4.2路由:参数的深度和动态默认值?

Ruby on rails Rails 4.2路由:参数的深度和动态默认值?,ruby-on-rails,routing,Ruby On Rails,Routing,我希望重用控制器,同时为不同的资源维护漂亮的链接 假设系统中有文章、用户和评论 Comments controller index action采用名为filter\u params的散列参数并进行筛选。因此,如果params[:filter\u params][:user\u id]具有值1,它将按id1的用户显示所有注释。与文章和文章id类似 我要寻找的是让以下路线发挥作用: /users/1/comments,tocomments#index,params{filter_params:{u

我希望重用控制器,同时为不同的资源维护漂亮的链接

假设系统中有文章、用户和评论

Comments controller index action采用名为
filter\u params
的散列参数并进行筛选。因此,如果
params[:filter\u params][:user\u id]
具有值
1
,它将按id
1
的用户显示所有注释。与文章和
文章id
类似

我要寻找的是让以下路线发挥作用:

  • /users/1/comments
    ,to
    comments#index
    ,params
    {filter_params:{user_id:1}}
  • /articles/1/comments
    ,to
    comments#index
    ,params
    {filter_params:{article_id:1}}
  • /articles/1/comments?filter_params[user_id]=1
    ,to
    comments#index
    ,params
    {filter_params:{article_id:1,user_id:1}
  • 我最初的想法是对路由使用
    defaults
    选项,并在那里构建默认的
    filter_参数。但这似乎只接受静态哈希,而不是可以访问请求的proc。最重要的是,第三个示例无法使用它,因为默认值不能被覆盖,随后,
    ?过滤器参数[user\u id]=1
    将被忽略

    那么,有没有办法让它只与路由器一起工作?或者我应该放弃并在
    CommentsController
    中创建一个
    before\u filter
    ,将
    params[:user\u id]
    params[:article\u id]
    填充到
    params[:filter\u params]