重定向HTTP请求,避免控制器操作问题

时间:2011-05-26 14:55:54

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

我正在使用Ruby on Rails 3.在我的项目中,我有很多类,其中一些在routes.rb文件中声明如下:

#routers.rb
resources :users

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

使用上面的代码,我可以访问以下网址:

<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
...

我想要做的是将某些网址请求重定向到其他网址,但如果在routes.rb文件中我将所有这些请求重定向,则某些控制器操作将无法正常工作,因为这些也是请求被重定向(GET,POST,...)。

如何解决此问题?

P.S。:我知道(也许)我的路由器语句是错误的,但此刻我正在寻找一个简单的解决方案。但是欢迎提出有关此事的建议。

2 个答案:

答案 0 :(得分:0)

查看这篇精彩的文章,它会对你有所帮助:
routing

您可以在routes.rb中定义需要重定向到的网址。 例如:
match 'some_url/:id' => redirect_to('/path_to_redirect')

答案 1 :(得分:0)

好的,看起来你想要设置一个只适用于给定路径和一个HTTP动词的重定向。这似乎是你在寻找的东西:

#routers.rb
resources :users

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

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

根据此路线,每次GET点击/users/profile/1的{​​{1}}请求都会被重定向到/profiles/1,而任何POSTPUTDELETE请求都会获胜没有重定向。

:via param仅在请求方法数学给定值时才会执行重定向。它还接受一系列动词,例如,您可以重定向:via => [:post, :put]

如果您添加有关所需特定重定向的更多详细信息,我们可以创建一个更好的示例。