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



我使用的是RubyonRails 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…)

如何解决此问题

第页。S.:我知道(也许)我的路由器声明是错误的,但目前我也在寻找一个简单的解决方案。不过,欢迎就此事提出建议。

好的,看起来您想要设置一个重定向,该重定向只适用于给定的路径和一个HTTP谓词。这似乎就是你想要的:

#routers.rb
resources :users
match "/users/profile/:id" => redirect("/profiles/%{id}"), :via => :get
namespace "users" do
  resources :profiles
  ...
end

基于此路由,每个命中/users/profile/1GET请求将被重定向到/profiles/1,而任何POSTPUTDELETE请求都不会受到重定向。

只有当请求方法计算给定值时,:via参数才会执行重定向。它还接受一组动词,因此,例如,您可以重定向:via => [:post, :put]

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

查看这篇伟大的文章,它将帮助您:
路由

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

相关内容

  • 没有找到相关文章

最新更新