简体   繁体   中英

RESTful Rails 3 routing

I'm new to RESTful design and confused: if I make PUT, GET or POST to a same resource, say, /weblogs/myweblog, how should I write in the route.rb, and related controller? Does the following works? In route.rb

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

In weblogs_controller.rb

def create_new_blog
   ...
end

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

and confused if I want to do GET/PUT/POST on the same resource, if their URL is same but only HTTP request is different, how to write different operations in the controller?

In general it's best to define your routes in terms of resources, so if you have a resource named webblog , your routes can be defined using just:

resources :weblogs

If you check the routes generated by this (with rake routes ), you will see that it defines a standard set of mappings from GET , PUT , POST and DELETE actions on urls to controller actions:

   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

These routes will map to standard controller actions index , create , new , show , etc.

If for whatever reason you want to define routes without using resources , you can define them separately:

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

By defining routes with get , put etc. you can map a single URL to multiple controller actions, eg like this:

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

This will map the URL /weblogs/myweblog to the method show_myweblog for a GET request, update_myweblog for a PUT request, create_myweblog for a POST request, and destroy_myweblog for a DELETE request.

Alternatively, using the standard resources , you can pick and choose which routes you want from the full set with the only option:

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

See the documentation for more details. I hope this answers your question, if not please provide more details on what you want to do in the comments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM