5

API はバージョン管理された名前空間にあり、

namespace :api do
  namespace :v1 do
    resources :posts
  end
end

しかし、コントローラに aを実行させると、ルートが定義されていないため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バージョンであるべきであることを自動的に検出する方法はありapi_v1_post_urlますか? 上書きできることはわかっていますredirect_toが、本当に名前空間を認識したいのですがurl_for、おそらくレールはこれにいくつかのフックを提供していますか?

4

1 に答える 1