在Rails中创建后如何更改路径的位置?

时间:2013-07-15 04:32:01

标签: ruby-on-rails ruby routes

我有一个如下所示的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反映更改?

2 个答案:

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