假设我为Foo控制器创建了一堆路由:
/foos
/foos/1
/foos/1/posts
等
现在我创建一个Bar,它是Foo的子类型。我不想通过Foo URL访问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
之间修改条形图。如何成功将其重定向或发送到正确的网址?
我尝试在我的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方法)这样的参数并没有被传递到新网址。有没有办法快速,轻松地解决这个问题(我不介意有点hackish)?
答案 0 :(得分:1)
如果Foo和Bar也是模特,或者你以某种方式拥有" Foo"和" Bar"可以在这些操作中作为字符串访问,您可以使用polymorphic_path
:
polymorphic_path(@thing.class.downcase)
polymorphic_path("Foo".downcase)
polymorphic_path([:show, @thing.class.downcase, @thing.id])
等...