Перенаправляет HTTP-запросы, избегая проблем с действиями контроллера - PullRequest
0 голосов
/ 26 мая 2011

Я использую Ruby on Rails 3. В моем проекте много классов, и некоторые из них указаны в файле routes.rb, например:

#routers.rb
resources :users

namespace "users" do
  resources :profiles
  ...
end

С помощью приведенного выше кода я могу получить доступ к следующим URL-адресам:

<my_web_site>/users/1
<my_web_site>/users/1/edit
...
# and also
<my_web_site>/users/profiles/1
<my_web_site>/users/profiles/1/edit
...

Я бы хотел перенаправить некоторые URL-запросы на другие URL-адреса , но если в файле routes.rb я перенаправлю все эти действия, некоторые действия контроллера не будут работать должным образом, поскольку эти запросы также перенаправляются (GET, POST, ...).

Как я могу решить эту проблему?

P.S .: Я знаю, что (возможно) мои утверждения маршрутизатора неверны, но в данный момент я ищу и простое решение проблемы. Однако предложения по этому вопросу приветствуются.

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

Хорошо, похоже, вы хотите установить перенаправление, которое будет применяться только к заданному пути и только одному HTTP-глаголу. Кажется, это то, что вы ищете:

#routers.rb
resources :users

match "/users/profile/:id" => redirect("/profiles/%{id}"), :via => :get

namespace "users" do
  resources :profiles
  ...
end

На основании этих маршрутов каждый GET запрос, попадающий в /users/profile/1, будет перенаправлен на /profiles/1, в то время как любые POST, PUT или DELETE запросы не будут перенаправлены.

Параметр :via будет выполнять перенаправление только в том случае, если метод запроса вычисляет указанное значение. Он также принимает массив глаголов, например, вы можете перенаправить :via => [:post, :put]

Если вы добавите более подробную информацию о конкретных нужных вам перенаправлениях, мы можем создать лучший пример.

0 голосов
/ 26 мая 2011

Проверьте эту замечательную статью, она поможет вам:
Маршрутизация

Вы можете определить URL-адреса, на которые нужно перенаправить сообщения, в routes.rb. Например:
match 'some_url/:id' => redirect_to('/path_to_redirect')

...