2012-11-01 47 views
0

我是RESTful设计的新手,感到困惑:如果我将PUT,GET或POST放在同一个资源上,比如/ weblogs/myweblog,我应该如何在route.rb中写入相关的控制器? 以下是否有效? 在route.rbRESTful Rails 3 routing

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 

和困惑,如果我想要做坐上同一资源/ PUT/POST,如果他们的网址是相同的,但唯一的HTTP请求是不同的是,如何在控制器中编写不同的操作?

回答

1

一般来说,最好在资源方面来定义你的路由,所以如果你有一个名为webblog资源,你的路由可以只用定义:如果选中该生成的路由(

resources :weblogs 

rake routes),你会看到,它定义了一套标准的映射,从GETPUTPOSTDELETE行动上的网址控制器动作:

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 

这些路线将映射到标准的控制器操作indexcreatenewshow

如果要定义路线不使用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 /维博/ myweblog映射到方法show_myweblog为GET请求,update_myweblog对于PUT请求,create_myweblog对POST请求,并destroy_myweblog为一个DELETE请求。

另外,使用标准resources,你可以挑选你从全套与only选择想要的路线:

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

有关详细信息,请参阅documentation。我希望这回答你的问题,如果不是,请提供更多关于你想在评论中做什么的细节。