我正在创建一个条目表单,我希望只有三个url参数就可以访问:example.com/entries/new/2011/01/27
如果有人试图访问任何其他网址(即example.com/entries/new
或{{1}我希望Rails设置:alert并将用户反弹回索引页面。
目前,我在routes.rb example.com/entries/new/2011/
中只有此代码。如果URL中没有正确的参数,我需要做什么来控制重定向?我会检查控制器中的每个参数,然后执行match '/entries/new/:year/:month/:day' => 'entries#new'
,或者这是我可以从routes.rb文件专门执行的操作吗?如果它是前者,是否有更简单的方法来检查除了以下所有三个参数:
redirect_to
答案 0 :(得分:1)
此路线需要存在所有三个参数:
match '/entries/new/:year/:month/:day' => 'entries#new'
仅使用该路线,GET /entries/new
将导致:
No route matches "/entries/new"
您可以在routes.rb
内重定向,如下所示:
match '/entries' => 'entries#index'
match '/entries/new/:year/:month/:day' => 'entries#new'
match "/entries/new/(*other)" => redirect('/entries')
第二行匹配存在所有三个参数的路径。第三行使用“route globbing”匹配/entries/new
的所有其他情况,并进行重定向。与第三行匹配的请求不会达到EntriesController#new
。
注意:如果您已经定义了到EntriesController#index
的路线,则可能不需要第一行 - 但请注意resources :entries
,这将重新定义index
和{{1 }}
更多信息可以在指南Rails Routing From the Outside In中找到。使用日期参数时,约束是个好主意(第4.2节)