检查是否存在多个参数

时间:2011-01-27 22:54:58

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

我正在创建一个条目表单,我希望只有三个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

1 个答案:

答案 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节)