我有一个版本化的命名空间中的API,
namespace :api do
namespace :v1 do
resources :posts
end
end
但现在当我让我的控制器执行 redirect_to @post
时,我会得到一个关于 Post
的路由错误,因为没有为其定义路由。
def create
@post = Post.new(params[:post])
if @post.save
redirect_to @post
else
# ...
end
end
undefined method `post_url' for #<Api::V1::PostsController:0x007fb9c5fc8858>
我知道我可以更新控制器以重定向到命名路由,这并不是世界末日:
def create
@post = Post.new(params[:post])
if @post.save
redirect_to api_v1_post_url(@post)
# or redirect_to [:api, :v1, @post]
else
# ...
end
end
有没有办法让redirect_to @post
自动检测应该在正确的api版本中使用(因此Rails会使用api_v1_post_url
)?我知道我可以重写redirect_to
,但我真正想要的是一个命名空间感知的url_for
,也许Rails提供了一些钩子来实现这一点?