Rails 3 - 如何使用所有选项和参数重定向?

时间:2015-01-24 19:27:54

标签: ruby-on-rails-3 rails-routing

假设我为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)?

1 个答案:

答案 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])

等...