我有一个如下所示的routes.rb文件:
namespace :api do
namespace :v1 do
resources :posts, except: [:new, :edit]
end
end
这让我可以生成像“mywebsite.com/api/v1/posts”这样的网址,而不仅仅是默认的“mywebsite.com/posts”。
我的create方法如下所示:
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: @post
工作得很好,直到命名我的网址。如何让location: @post
反映更改?
答案 0 :(得分:2)
location: api_v1_post_path(@post)
答案 1 :(得分: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)