0

次のような routes.rb ファイルがあります。

namespace :api do
 namespace :v1 do
  resources :posts, except: [:new, :edit]
 end
end

これにより、デフォルトの「mywebsite.com/posts」ではなく、「mywebsite.com/api/v1/posts」のような URL を生成できます。

私の作成方法は次のようになります。

def create
    @post = Post.new(params[:post])

    if @post.save
      render json: @post, status: :created, location: @post
    else
      render json: @post.errors, status: :unprocessable_entity
    end
end

location: @postURL に名前空間を付けるまではうまくいきました。location: @postに変更を反映させるにはどうすればよいですか?

4

2 に答える 2

2

location: api_v1_post_path(@post)

于 2013-07-15T04:52:55.030 に答える
1

コマンド ラインから実行するrake routesと、名前空間によってルートがどのように影響を受けるかがわかります。探している関連ルートは次のようになります。

# rake routes
api_v1_post GET    /api/v1/posts/:id(.:format)                       api/v1/posts#show

showからアクションにアクセスできるようになったことがわかりますapi_v1_post。コントローラーで、@postインスタンス変数を渡して正しいルートを取得します。

# app/controllers/posts_controller.rb
render json: @post, status: :created, location: api_v1_post_path(@post)
于 2013-07-15T06:48:02.760 に答える