我希望重用控制器,同时为不同的资源维护漂亮的链接。
让我们说系统中有文章,用户和评论。
注释控制器索引操作采用名为filter_params
的哈希参数并进行过滤。因此,如果params[:filter_params][:user_id]
的值为1
,则会显示ID为1
的用户的所有评论。与文章和article_id
类似。
我正在寻找的是让以下路线有效:
/users/1/comments
,comments#index
,参数{ filter_params: { user_id: 1 } }
/articles/1/comments
,comments#index
,参数{ filter_params: { article_id: 1 } }
/articles/1/comments?filter_params[user_id]=1
,comments#index
,参数{ filter_params: { article_id: 1, user_id: 1 } }
我最初的想法是对路由使用defaults
选项并在那里构造默认的filter_params
。但这似乎只接受静态哈希而不是proc我可以访问请求。最重要的是,它不适用于第三个示例,因为默认值无法被覆盖,随后?filter_params[user_id]=1
将被忽略。
那么有没有办法让它只与路由器一起工作?或者我应该放弃并在before_filter
中创建一个CommentsController
,params[:user_id]
和params[:article_id]
填充params[:filter_params]
?