Ruby on Rails For Java
   Programmers
          Rob Sanheim

      www.robsanheim.com
      www.seekingalpha.com
        w...
(Briefly) About Me
Why Rails?
Because its fun.
Because it will
make you a better
  programmer.
“Learn at least one new [programming] language
 every year. Different languages solve the same
 problems in different ways...
Because you might
just be able to get
    paid for it.
What is Ruby?
• Fully Object Oriented
• Interpreted
• Simple,Yet Powerful
• Open Source
• Born in Japan in 1995
• Yukihiro...
Power
• Closures (aka Blocks)
• Modules
• Reflection
• Open Classes
Typing

• Strong
• Dynamic
• “Duck”
Lets see some code
HelloWorld
Reading a file
Reading a file - Ruby
Collections
Reflection
Ruby on Rails

• David Heinemeier Hansson (DHH)
• Began via Basecamp in mid 2003
• Released July 2004
• Full Stack MVC Web...
Accolades


• 2006 Jolt award - Web Dev Tool
• Featured in BusinessWeek, Wired
• DHH “Best Hacker” award from Google
Converts

• Dave Thomas
• Bruce Tate
• Stuart Halloway
• Justin Gehtland
• David Geary
• James Duncan Davidson
“Rails is the most well thought-out
 web development framework I’ve ever
 used. And that’s in a decade of doing
web applic...
Platform


• MySQL, PostgreSQL, SQLite, Oracle,
 SQL Server, DB2, or Firebird
• develop anywhere
• Apache or LightTPD + Fa...
* Done via intelligent
reflection and
metaprogramming
* Emphasis on writing code
to get stuff done - avoid
boilerplate
* Sc...
NO XML!
Intelligent Defaults
Only explicitly configure
when necessary




                Convention over
                 ...
ActiveRecord
 An object that wraps a row in a database
 table or view, encapsulates the database
access, and adds domain l...
Controller and
             View
• ActionPack maps URLs to controller
• View handled via Ruby in HTML (RHTML) or builders
...
from: http://www.slash7.com/articles/2005/02/22/mvc-the-most-vexing-conundrum
Lets see some code
create table orders (
 id               int            not null    auto_increment,
 name             varchar(100)   not nu...
class Order < ActiveRecord::Base
end
order = Order.new
order.name = “Rob”
order.email = “rob@yahoo.com”
order.address = “123 1st St”
order.save
an_order = Order.find(24)

robs_order = Order.find(:first, :conditions => "name = 'Rob'")

rob_count = Order.count(:all, :...
create table order_lines (
 id              int           not null   auto_increment,
 description     varchar(100) not nul...
class Order < ActiveRecord::Base
      has_many :order_lines
 end

class OrderLine < ActiveRecord::Base

 
 
 belongs_to :...
my_order = Order.find(id)
has_order_lines = my_order.order_lines?
order_lines_count = my_order.order_lines.size

my_order....
Validation
quick summary
   Gross Income                     $               0        Total Tax                     $             0
 ...
quick summary
   Gross Income                     $               0        Total Tax                     $                ...
Much More...

• many to many via has_many :through
• eager loading
• acts_as_list, acts_as_tree
• single table inheritance...
ActionController
http://url.com/weblog/
             aka
http://url.com/weblog/index.rhtml
/app/controllers/weblog_controller.rb:
class WeblogController < ActionController::Base
   layout "weblog/layout"

  def in...
/app/views/weblog/layout.rhtml:
  <html><body>
  <%= @content_for_layout %>
  </body></html>

/app/views/weblog/index.rhtm...
http://url.com/weblog/display/5
http://url.com/weblog/display/123
   http://url.com/weblog/new/
ActionPack features
• rxml - XML Builders
• rhtml - HTML templates
• helpers - module to assist the view
• form and field h...
! &'())*+,%-.,//".0.1
    !"#'4,+:
    ''!3&4$'('J&4$7!5,K"#$#%&B*+,CL
    "%!
                                           ...
Ajax Support

• Ajax support built in since March ’05
• Built on Prototype and Scriptaculous
• Updating forms and tables v...
Other Stuff

• Awesome Testing support built in
• Generators/scaffolding
• Migrations - refactor your database
• Capistran...
But Does it Scale?
Yes.
• scales just like Yahoo! , LiveJournal, etc
• share nothing
• load balance to each tier
• add servers as needed
http://www.rubyonrails.com/applications
Why Not Rails?
• Legacy databases
• Tool support
• Deployment is hard
• Internationalization
• Its different
• Its advanced
The Future
• Rails growth will continue
• Its influence is already felt everywhere
• JRuby could be huge
• Its biggest impa...
No mater what, its going to be a
          fun ride.
Thank You!
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Ruby on Rails For Java Programmers
Upcoming SlideShare
Loading in...5
×

Ruby on Rails For Java Programmers

725

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
725
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
31
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ruby on Rails For Java Programmers

  1. 1. Ruby on Rails For Java Programmers Rob Sanheim www.robsanheim.com www.seekingalpha.com www.ajaxian.com
  2. 2. (Briefly) About Me
  3. 3. Why Rails?
  4. 4. Because its fun.
  5. 5. Because it will make you a better programmer.
  6. 6. “Learn at least one new [programming] language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut.” - David Thomas and Andy Hunt
  7. 7. Because you might just be able to get paid for it.
  8. 8. What is Ruby? • Fully Object Oriented • Interpreted • Simple,Yet Powerful • Open Source • Born in Japan in 1995 • Yukihiro Matsumoto (“Matz”)
  9. 9. Power • Closures (aka Blocks) • Modules • Reflection • Open Classes
  10. 10. Typing • Strong • Dynamic • “Duck”
  11. 11. Lets see some code
  12. 12. HelloWorld
  13. 13. Reading a file
  14. 14. Reading a file - Ruby
  15. 15. Collections
  16. 16. Reflection
  17. 17. Ruby on Rails • David Heinemeier Hansson (DHH) • Began via Basecamp in mid 2003 • Released July 2004 • Full Stack MVC Web Framework • Easy database-based web apps
  18. 18. Accolades • 2006 Jolt award - Web Dev Tool • Featured in BusinessWeek, Wired • DHH “Best Hacker” award from Google
  19. 19. Converts • Dave Thomas • Bruce Tate • Stuart Halloway • Justin Gehtland • David Geary • James Duncan Davidson
  20. 20. “Rails is the most well thought-out web development framework I’ve ever used. And that’s in a decade of doing web applications for a living. I’ve built my own frameworks, helped develop the Servlet API, and have created more than a few web servers from scratch. Nobody has done it like this before.” -James Duncan Davidson, Creator of Tomcat and Ant
  21. 21. Platform • MySQL, PostgreSQL, SQLite, Oracle, SQL Server, DB2, or Firebird • develop anywhere • Apache or LightTPD + FastCGI for production
  22. 22. * Done via intelligent reflection and metaprogramming * Emphasis on writing code to get stuff done - avoid boilerplate * Scaffolding handles left over boilerplate DRY - Don’t Repeat Yourself
  23. 23. NO XML! Intelligent Defaults Only explicitly configure when necessary Convention over Configuration
  24. 24. ActiveRecord An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.
  25. 25. Controller and View • ActionPack maps URLs to controller • View handled via Ruby in HTML (RHTML) or builders • Ajax provided via Prototype and RJS
  26. 26. from: http://www.slash7.com/articles/2005/02/22/mvc-the-most-vexing-conundrum
  27. 27. Lets see some code
  28. 28. create table orders ( id int not null auto_increment, name varchar(100) not null, email varchar(255) not null, address text not null, pay_type char(10) not null, shipped_at datetime null, primary key (id) );
  29. 29. class Order < ActiveRecord::Base end
  30. 30. order = Order.new order.name = “Rob” order.email = “rob@yahoo.com” order.address = “123 1st St” order.save
  31. 31. an_order = Order.find(24) robs_order = Order.find(:first, :conditions => "name = 'Rob'") rob_count = Order.count(:all, :conditions => “name = ‘Rob’”) robs_order = Order.find_by_name(“Rob”) more_orders = Order.find_all_by_name_and_pay_type(name, type) Order.delete(24) robs_order.destroy
  32. 32. create table order_lines ( id int not null auto_increment, description varchar(100) not null, order_id int not null, primary key (id), constraint fk_order foreign key (order_id) references orders(id) );
  33. 33. class Order < ActiveRecord::Base has_many :order_lines end class OrderLine < ActiveRecord::Base belongs_to :order end one to many bet ween orders and order lines “has_many” is actually a class level method call that generates instance methods
  34. 34. my_order = Order.find(id) has_order_lines = my_order.order_lines? order_lines_count = my_order.order_lines.size my_order.order_lines.push(new_order, another_new_order) specific_order_line = my_order.find(....) specific_order_lnes = my_order.find_by_description(“abc”) my_line = OrderLine.find(15) has_owning_order = my_line.order.nil? old_order = my_line.order my_line.order= another_order
  35. 35. Validation
  36. 36. quick summary Gross Income $ 0 Total Tax $ 0 Adjusted Gross Income $ 0 Total Payments $ 0 Total Deductions $ 16,400 Refund Amount $ * confirmation checks t wo 0 Total Taxable Income $ 0 Amount You Owe $ password0fields against each to file your 2005 federal extension, simply follow these instructions other STEP A - Once your e-filed extension has been accepted, you will acceptance is pattern of * receive an email with a confirmation number. Enter the confirmation number on your printed copy of Form 4868 and keep for your records. of ser vice/agreement terms checkbox STEP B - Since you indicated that you are not paying an amount with Form 4868, there is nothing to mail. For more information about tax, mortgage and financial services call 1-800-HRBLOCK or visit hrblock.com
  37. 37. quick summary Gross Income $ 0 Total Tax $ 0 Adjusted Gross Income $ 0 Total Payments $ 0 Total Deductions $ 16,400 Refund Amount $ 0 Total Taxable Income $ 0 Amount You Owe $ 0 to file your 2005 federal extension, simply follow these instructions STEP A - Once your e-filed extension has been accepted, you will receive an email with a confirmation number. Enter the confirmation number on your printed copy of Form 4868 and keep for your records. STEP B - Since you indicated that you are not paying an amount with Form 4868, there is nothing to mail. For more information about tax, mortgage and financial services call 1-800-HRBLOCK or visit hrblock.com
  38. 38. Much More... • many to many via has_many :through • eager loading • acts_as_list, acts_as_tree • single table inheritance • callbacks and observers
  39. 39. ActionController
  40. 40. http://url.com/weblog/ aka http://url.com/weblog/index.rhtml
  41. 41. /app/controllers/weblog_controller.rb: class WeblogController < ActionController::Base layout "weblog/layout" def index @posts = Post.find_all end def display @post = Post.find(:params[:id]) ||= conditional assignment end operator def new cart is a non persistent model @post = Post.new object used for storing/calculating products end “the flash” = place to throw stuff def create like response messages, error @post = Post.create(params[:post]) reports that accumulate as a request is processed redirect_to :action => "display", :id => @post.id end end
  42. 42. /app/views/weblog/layout.rhtml: <html><body> <%= @content_for_layout %> </body></html> /app/views/weblog/index.rhtml: <% for post in @posts %> <p><%= link_to(post.title, :action => "display", :id => post.id %></p> <% end %> /app/views/weblog/display.rhtml: <p> <b><%= post.title %></b><br/> <b><%= post.content %></b> </p> /app/views/weblog/new.rhtml: <%= form "post" %>
  43. 43. http://url.com/weblog/display/5 http://url.com/weblog/display/123 http://url.com/weblog/new/
  44. 44. ActionPack features • rxml - XML Builders • rhtml - HTML templates • helpers - module to assist the view • form and field helpers • layouts and partials - similiar to tiles • page caching and fragment caching
  45. 45. ! &'())*+,%-.,//".0.1 !"#'4,+: ''!3&4$'('J&4$7!5,K"#$#%&B*+,CL "%! " "!$-0.2-&/ >D('?9$%E:#F'*#8:+95'(-'G&#A4G2'*+,'(-'!3&4$'D- >D(':4H:E!4I,'''''''''''G3&4$G2'G5#%4G''D->@"- >D(':4H:E!4I,'''''''''''G3&4$G2'G8935:$;G''D->@"- >D('"#&&<9$,E!4I,'G3&4$G2'G"#&&<9$,G''D->@"- 7'7'7 ! NO4'#""I+8#:+95'$484+A4&'#'$4P34&:' >D('45,E?9$%E:#F'D- :9'4,+:'#'3&4$7'Q:'$4#,&':O4',#:#'+5:9' #'54<'J&4$'%9,4I'9MR48:7 hash created with user attributes for easy " NO4'4,+:7$O:%I':4%"I#:4'+&'8#II4,7'Q:' update/save 3&4&':O4'+5?9$%#:+95'+5':O4'3&4$' 9MR48:':9'F454$#:4777 # >?9$%'#8:+95(6@%;#""@&#A4@./016- ''''>+5"3:'5#%4(63&4$B5#%4C6'777'- field helpers make input # :O4'SNTU'+&'&45:':9':O4'M$9<&4$7' ''''>+5"3:'5#%4(63&4$B8935:$;C6'777'- (s) easy ''''>+5"3:'5#%4(63&4$B"#&&<9$,C6'777'- VO45':O4'$4&"95&4'+&'$484+A4,777 ''''7'7'7 >@?9$%- $ :O4'"#$#%4:4$&'#$4'4H:$#8:4,'+5:9'#' 54&:4,'O#&O7' % NO4'&#A4'#8:+95'3&4&':O4' "#$#%4:4$&':9'!5,':O4'3&4$'$489$,' #5,'3",#:4'+:7 $ !"#$#%&'(') ''''*+,'(-'./012 ''''*3&4$'(-')' ''''''''*5#%4'(-'6'777'62' % !"#'&#A4 ''''''''*8935:$;'(-'6'777'62 ''''''''*"#&&<9$,'(-'6'777'6''= ''3&4$'('J&4$7!5,K"#$#%&B*+,CL = ''$#'3&4$73",#:4E#::$+M3:4&K"#$#%&B*3&4$CL '''''777 ''"%! "%! Figure 17.2: Models, Controllers, and Views Work Together
  46. 46. Ajax Support • Ajax support built in since March ’05 • Built on Prototype and Scriptaculous • Updating forms and tables via Ajax is trivial • Best Ajax support of any web framework
  47. 47. Other Stuff • Awesome Testing support built in • Generators/scaffolding • Migrations - refactor your database • Capistrano - automate deployment • Huge, helpful community
  48. 48. But Does it Scale?
  49. 49. Yes.
  50. 50. • scales just like Yahoo! , LiveJournal, etc • share nothing • load balance to each tier • add servers as needed
  51. 51. http://www.rubyonrails.com/applications
  52. 52. Why Not Rails?
  53. 53. • Legacy databases • Tool support • Deployment is hard • Internationalization • Its different • Its advanced
  54. 54. The Future • Rails growth will continue • Its influence is already felt everywhere • JRuby could be huge • Its biggest impact may be felt in future frameworks
  55. 55. No mater what, its going to be a fun ride.
  56. 56. Thank You!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×