【问题标题】:Redirects HTTP requests avoiding controller action issues重定向 HTTP 请求,避免控制器操作问题
【发布时间】:2011-05-26 14:55:53
【问题描述】:

我正在使用 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
...

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

我该如何解决这个问题?

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

【问题讨论】:

  • 您能否添加一些您需要的重定向和无法正常工作的重定向的更详细示例?
  • @NeX 此时所有 URL 工作属性,因为我没有更改任何内容,但是......我会更新问题。

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


【解决方案1】:

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

#routers.rb
resources :users

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多