Your SlideShare is downloading. ×
0
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Advanced RESTful Rails
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Advanced RESTful Rails

3,215

Published on

Slides from Ben Scofield's session on Advanced RESTful Rails at Railsconf 2008

Slides from Ben Scofield's session on Advanced RESTful Rails at Railsconf 2008

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,215
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
108
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Advanced RESTful Rails Ben Scofield
  2. Constraints
  3. Shall I compare thee to a summer's day? Thou art more lovely and more temperate. Rough winds do shake the darling buds of May, And summer's lease hath all too short a date. Sometime too hot the eye of heaven shines, And often is his gold complexion dimm'd; And every fair from fair some time declines, By chance, or nature's changing course, untrimm'd; But thy eternal summer shall not fade ...
  4. app controllers helpers models views config environments initializers db doc lib tasks log public images javascripts stylesheets script performance process test fixtures functional integration unit ...
  5. exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/users exists test/functional/ exists test/unit/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/user.rb create test/unit/user_test.rb create test/fixtures/users.yml create db/migrate create db/migrate/20080531002035_create_users.rb create app/controllers/users_controller.rb create test/functional/users_controller_test.rb create app/helpers/users_helper.rb route map.resources :users
  6. REST
  7. Audience Participation! who is building restful applications?
  8. 212,000 Results
  9. How do I handle ...
  10. Difficult even for the pros
  11. class UsersController < ApplicationController # ... def activate self.current_user = params[:activation_code].blank? ? false : # ... if logged_in? && !current_user.active? current_user.activate! flash[:notice] = quot;Signup complete!quot; end redirect_back_or_default('/') end def suspend @user.suspend! redirect_to users_path end def unsuspend @user.unsuspend! redirect_to users_path end def destroy @user.delete! redirect_to users_path end def purge @user.destroy redirect_to users_path Restful Authentication end end
  12. What is REST?
  13. Resources hey-helen - flickr
  14. Addressability memestate - flickr
  15. Representations stevedave - flickr
  16. Stateless* http://www1.ncdc.noaa.gov/pub/data/images/usa-avhrr.gif
  17. Audience Participation! why care?
  18. Process
  19. tiptoe - flickr
  20. Domain ejpphoto - flickr
  21. Modeled kerim - flickr
  22. ?
  23. Identify resources
  24. Select methods to expose
  25. Respect the middleman
  26. Simple
  27. My Pull List
  28. Releases
  29. ActionController::Routing::Routes.draw do |map| map.releases 'releases/:year/:month/:day', :controller => 'items', :action => 'index' end class ItemsController < ApplicationController # release listing page; filters on year/month/day from params def index; end end
  30. Issues
  31. ActionController::Routing::Routes.draw do |map| map.resources :issues end class IssuesController < ApplicationController # issue detail page def show; end end
  32. Series
  33. ActionController::Routing::Routes.draw do |map| map.resources :titles end class TitlesController < ApplicationController # title detail page def show; end end
  34. ActionController::Routing::Routes.draw do |map| map.resources :titles, :has_many => [:issues] end class IssuesController < ApplicationController # issue listing page; could be series page def index; end end
  35. Users
  36. ActionController::Routing::Routes.draw do |map| map.resources :users end class UsersController < ApplicationController before_filter :require_login, :only => [:edit, :update] # edit account def edit; end # update account def update; end end
  37. Lists
  38. ActionController::Routing::Routes.draw do |map| map.resources :users end class UsersController < ApplicationController # public view - pull list def show; end end
  39. ActionController::Routing::Routes.draw do |map| map.resources :users, :has_many => [:titles] end class TitlesController < ApplicationController # public view - pull list, given a user_id def index; end end
  40. Advanced
  41. Login* mc - flickr
  42. ActionController::Routing::Routes.draw do |map| map.resource :session end class SessionsController < ApplicationController # login form def new; end # login action def create; end # logout action def destroy; end end
  43. Homepage seandreilinger - flickr
  44. ActionController::Routing::Routes.draw do |map| map.resource :homepage map.root :homepage end class HomepagesController < ApplicationController # homepage def show; end end
  45. ActionController::Routing::Routes.draw do |map| map.resources :contents map.root :controller => ‘contents’, :action => ‘show’, :page => ‘homepage’ end class ContentsController < ApplicationController # static content def show # code to find a template named according to params[:page] end end
  46. ActionController::Routing::Routes.draw do |map| map.resources :ads map.root :ads end class AdsController < ApplicationController # ad index - the million dollar homepage def index; end end
  47. Dashboard hel2005 - flickr
  48. ActionController::Routing::Routes.draw do |map| map.resource :dashboard end class DashboardsController < ApplicationController before_filter :require_login # dashboard def show; end end
  49. ActionController::Routing::Routes.draw do |map| map.resources :instruments end class InstrumentsController < ApplicationController before_filter :require_login # dashboard def index @instruments = current_user.instruments end end
  50. Preview ashoe - flickr
  51. ActionController::Routing::Routes.draw do |map| map.resources :posts, :has_one => [:preview] end class PreviewsController < ApplicationController def create @post = Post.find(params[:post_id]) @post.attributes = params[:post] render :template => 'posts/show' end end
  52. ActionController::Routing::Routes.draw do |map| map.resources :posts map.resource :preview end class PreviewsController < ApplicationController def create @post = Post.new(params[:post]) render :template => 'posts/show' end end
  53. Search seandreilinger - flickr
  54. ActionController::Routing::Routes.draw do |map| map.resources :posts end class PostsController < ApplicationController def index if params[:query].blank? @posts = Post.find(:all) else @posts = Post.find_for_query(params[:query]) end end end
  55. ActionController::Routing::Routes.draw do |map| map.resource :search end class SearchesController < ApplicationController def show @results = Searcher.find(params[:query]) end end
  56. Wizards dunechaser - flickr
  57. /galleries/new
  58. /restaurants/:id/photos/new
  59. /restaurants/:id/photos/edit
  60. ActionController::Routing::Routes.draw do |map| map.resources :galleries map.resources :galleries map.resources :restaurants, :has_many => [:photos] map.with_options :controller => 'photos' do |p| p.edit_restaurant_photos 'restaurants/:restaurant_id/photos/edit', :action => 'edit' p.update_restaurant_photos 'restaurants/:restaurant_id/photos/update', :action => 'update', :conditions => {:method => :put} end end
  61. Collections wooandy - flickr
  62. Web Services josefstuefer - flickr
  63. Staff Directory Inventory Search Application Text RESTful API HR etc.
  64. RESTful API Staff Directory RESTful API Inventory Search Application Text RESTful API HR RESTful API etc.
  65. this slide left intentionally blank Administration
  66. ActionController::Routing::Routes.draw do |map| map.namespace :admin do |admin| admin.resources :invitations admin.resources :emails admin.resources :users admin.resources :features end end
  67. Audience Participation! what gives you fits?
  68. Rails, Specifically
  69. <%= link_to 'Delete', record, :method => 'delete', :confirm => 'Are you sure?' %> <a href=quot;/records/1quot; onclick=quot;if (confirm('Are you sure?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);f.submit(); };return false;quot;>Delete</a> Accessibility
  70. ActionController::Routing::Routes.draw do |map| map.users 'users', :controller => ‘users’, :action => ‘index’ map.users 'users', :controller => ‘users’, :action => ‘create’ end Hand-Written Routes
  71. ActionController::Routing::Routes.draw do |map| map.resources :users # Install the default route as the lowest priority. map.connect ':controller/:action/:id' end Default Routing
  72. Collections wooandy - flickr
  73. ActionController::Routing::Routes.draw do |map| map.resources :records end class RecordsController < ApplicationController def index; end def show; end # ... end Mixed
  74. ActionController::Routing::Routes.draw do |map| map.resource :record_list map.resources :records end class RecordListsController < ApplicationController def show; end # ... end class RecordsController < ApplicationController def show; end # ... end Separated
  75. Audience Participation! where’s rails bitten you?
  76. Thanks! ben scofield ben.scofield@viget.com http://www.viget.com/extend http://www.culann.com

×