【问题标题】:Rails redirect_to "www.somewebsite.com" with GET/POST parameters?带有 GET/POST 参数的 Rails 重定向到“www.somewebsite.com”?
【发布时间】:2011-01-02 07:23:00
【问题描述】:

我正在尝试在我的一个控制器中向完全限定的 URL 发出 redirect_to + 我想传入一些参数

我在站点 A 的控制器中:

redirect_to: "www.siteB.com/my_controller/my_action?my_parameter=123"

在 Rails 中有更好的方法吗?

【问题讨论】:

    标签: ruby-on-rails ruby http-status-code-301 http-status-code-302


    【解决方案1】:

    如果 SiteB 正在运行相同的应用程序(即该服务器的路由相同),那么您可以构建您描述的重定向:

    redirect_to :host => "www.siteB.com", 
                :controller => "my_controller", 
                :action => "my_action",  
                :my_parameter => 123
    

    请注意,任何未被url_for 处理的键都会自动编码为参数。

    【讨论】:

    • 此解决方案假定 SiteA 的 routes.rb 具有与该控制器/操作对匹配的路由。如果您保留了默认路由,这不是问题。
    【解决方案2】:

    您显然可以通过主机:

    redirect_to { :host => "www.siteB.com", :controller => "my_controller", :action => "my_action",  :id => 123 }
    

    查看url_for 的文档。

    【讨论】:

    • 此解决方案假定 SiteA 的 routes.rb 具有与该控制器/操作对匹配的路由。如果您保留了默认路由,这不是问题。
    【解决方案3】:

    与其他回复类似。如果您在站点 A 的 routes.rb 中设置了定义路径的控制器,则可以使用生成的 url 帮助程序。只需将 :host 作为参数覆盖即可。

    例子:

    站点 A Routes.rb:

    ...
    map.resource whatever
    ...
    

    站点 A 控制器:

    ...
    redirect_to edit_whatever_url(:host => "www.siteB.com", :my_parameter => 123)
    ...
    

    只要 SiteB 的网络服务器(rails 或其他)识别http://www.siteB.com/whaterver/edit?my_parameter=123,你就可以了。

    警告:请记住,使用 302 重定向帖子会产生 RFC 2616 中定义的特定后果。简而言之,这意味着在重定向的帖子成功之前,将要求用户重新确认他们对新 URL 的帖子。

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多