Rails 3 - 如何使用所有选项和参数进行重定向?
Rails 3 - How to redirect with all options and parameters?
假设我为 Foo 控制器创建了一堆路由:
/foos
/foos/1
/foos/1/posts
等等
现在我创建一个 Bar,它是 Foo 的 子类型。我不想让 Foo urls 可以访问 Bars 来混淆用户,所以我为 Bars 创建了重复的路径。
/bars (goes to Foo controller)
/bars/1 (goes to Foo controller)
/bars/1/posts (goes to Posts controller)
一切正常。问题是我在我的应用程序中的每个地方都使用了名称路由,比如
def update
# bla bla bla
redirect_to foo_path(@foo)
end
这将使用户编辑栏从 /bar/1/edit
到 /foo/1
。我怎样才能成功地将它们重定向或发送到正确的 urls?
我尝试在我的 ApplicationController 中执行此操作,它适用于 GET 请求,但没有别的:
def ensure_correct_path
if current_foo_is_type_bar && request.path =~ /^\/foo/
redirect_to request.path.sub(/^\/foo/, /^\/bar/)
end
end
不幸的是,用户发布的内容(以及它是什么 HTTP 方法)等参数不会传递给新 url。有什么方法可以快速轻松地解决这个问题(我不介意有点老套)?
如果 Foo 和 Bar 也是模型,或者您以某种方式在这些操作中将 "Foo" 和 "Bar" 作为字符串访问,您可以使用 polymorphic_path
:
polymorphic_path(@thing.class.downcase)
polymorphic_path("Foo".downcase)
polymorphic_path([:show, @thing.class.downcase, @thing.id])
等...
假设我为 Foo 控制器创建了一堆路由:
/foos
/foos/1
/foos/1/posts
等等
现在我创建一个 Bar,它是 Foo 的 子类型。我不想让 Foo urls 可以访问 Bars 来混淆用户,所以我为 Bars 创建了重复的路径。
/bars (goes to Foo controller)
/bars/1 (goes to Foo controller)
/bars/1/posts (goes to Posts controller)
一切正常。问题是我在我的应用程序中的每个地方都使用了名称路由,比如
def update
# bla bla bla
redirect_to foo_path(@foo)
end
这将使用户编辑栏从 /bar/1/edit
到 /foo/1
。我怎样才能成功地将它们重定向或发送到正确的 urls?
我尝试在我的 ApplicationController 中执行此操作,它适用于 GET 请求,但没有别的:
def ensure_correct_path
if current_foo_is_type_bar && request.path =~ /^\/foo/
redirect_to request.path.sub(/^\/foo/, /^\/bar/)
end
end
不幸的是,用户发布的内容(以及它是什么 HTTP 方法)等参数不会传递给新 url。有什么方法可以快速轻松地解决这个问题(我不介意有点老套)?
如果 Foo 和 Bar 也是模型,或者您以某种方式在这些操作中将 "Foo" 和 "Bar" 作为字符串访问,您可以使用 polymorphic_path
:
polymorphic_path(@thing.class.downcase)
polymorphic_path("Foo".downcase)
polymorphic_path([:show, @thing.class.downcase, @thing.id])
等...