0

我是 RESTful 设计的新手并且很困惑:如果我对同一资源进行 PUT、GET 或 POST,例如 /weblogs/myweblog,我应该如何在 route.rb 和相关控制器中编写?以下是否有效?在 route.rb

match 'weblogs/myweblog/new' => 'weblogs#create_new_blog'
match 'weblogs/myweblog/edit/:id' => 'weblogs#edit_blog' 
.
.

在 weblogs_controller.rb

def create_new_blog
   ...
end

def edit_blog
  params[:id]..
  ....
end

如果我想在同一个资源上执行 GET/PUT/POST 并且感到困惑,如果它们的 URL 相同但只有 HTTP 请求不同,如何在控制器中编写不同的操作?

4

1 回答 1

1

一般来说,最好根据资源来定义你的路由,所以如果你有一个名为 的资源webblog,你的路由可以只使用:

resources :weblogs

如果您检查由此生成的路由(使用rake routes),您将看到它定义了一组标准的映射,从、GET和url上的操作到控制器操作:PUTPOSTDELETE

   webblogs GET    /weblogs(.:format)         weblogs#index
            POST   /weblogs(.:format)         weblogs#create
new_webblog GET    /weblogs/new(.:format)     weblogs#new
    webblog GET    /weblogs/:id(.:format)     weblogs#show
            PUT    /weblogs/:id(.:format)     weblogs#update
            DELETE /weblogs/:id(.:format)     weblogs#destroy

这些路由将映射到标准控制器操作index、、、、createnewshow

如果出于某种原因您想在使用的情况下定义路由resources,则可以单独定义它们:

get '/weblogs' => 'weblogs#index'
get '/weblogs/new' => 'weblogs#new'
get '/weblogs/:id/edit' => 'weblogs#edit'
put '/weblogs/:id' => 'weblogs#update'
...

通过使用 等定义路由getput您可以将单个 URL 映射到多个控制器操作,例如:

get '/weblogs/myweblog' => 'weblogs#show_myweblog'
put '/weblogs/myweblog' => 'weblogs#update_myweblog'
post '/weblogs/myweblog' => 'weblogs#create_myweblog'
destroy '/weblogs/myweblog' => 'weblogs#destroymy_weblog'

这会将 URL /weblogs/myweblog 映射到show_myweblogGET 请求、update_myweblogPUT 请求、create_myweblogPOST 请求和destroy_myweblogDELETE 请求的方法。

或者,使用标准resources,您可以使用以下选项从全套路线中挑选您想要的路线only

resources :weblogs, only: [:show, :edit]

有关更多详细信息,请参阅文档。我希望这能回答您的问题,如果没有,请在评论中提供有关您想要做什么的更多详细信息。

于 2012-11-01T23:26:33.957 回答