Проверьте наличие нескольких параметров - PullRequest
0 голосов
/ 28 января 2011

Я создаю форму ввода, которую я хочу, чтобы она была доступна только при наличии трех параметров URL: example.com/entries/new/2011/01/27 Если кто-то пытается получить доступ к любому другому URL (например, example.com/entries/new или example.com/entries/new/2011/), я хочу, чтобы Railsустановить: оповещение и отослать пользователя обратно на страницу индекса.

В настоящее время у меня есть только этот код в моем route.rb match '/entries/new/:year/:month/:day' => 'entries#new'.Что мне нужно сделать, чтобы контролировать перенаправление, если в URL нет нужных параметров?Буду ли я проверять каждый параметр в контроллере и затем выполнять redirect_to, или это то, что я могу сделать исключительно из файла rout.rb?Если это первое, есть ли более простой способ проверить, что существуют все три параметра, кроме:

if params[:year].nil && params[:month].nil && params[:day].nil redirect_to ...

1 Ответ

1 голос
/ 28 января 2011

Этот маршрут требует наличия всех трех параметров:

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')

Вторая строка соответствует путям, где присутствуют все три параметра. Третья строка соответствует всем остальным случаям /entries/new с использованием «маршрутизации» и выполняет перенаправление. Запросы, соответствующие третьей строке, не попадут на EntriesController#new.

Примечание: вам может не понадобиться первая строка, если вы уже определили маршрут к EntriesController#index - но следите за resources :entries, который переопределит index и new.

Дополнительную информацию можно найти в руководстве Rails Маршрутизация извне . При использовании параметров даты, ограничения являются хорошей идеей (Раздел 4.2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...