1 / 15

Intro to Ruby On Rails

Intro to Ruby On Rails. Jon Walker. Ruby. Ruby is a reflective, object-oriented programming language Syntax inspired by Perl with Smalltalk-like object-oriented features Single-pass interpreted language Created by Yukihiro "Matz" Matsumoto, first released in 1995 Object-oriented

varen
Download Presentation

Intro to Ruby On Rails

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Intro to Ruby On Rails Jon Walker

  2. Ruby • Ruby is a reflective, object-oriented programming language • Syntax inspired by Perl with Smalltalk-like object-oriented features • Single-pass interpreted language • Created by Yukihiro "Matz" Matsumoto, first released in 1995 • Object-oriented • Every bit of data is an object, from integers to classes • Single inheritance with dynamic dispatch, mixins and singleton methods • Multi-paradigm programming language • Procedural: functions/variables outside classes are part of the root 'self' Object • Object orientation: everything is an object • Functional: anonymous functions, closures, and continuations • Introspection, reflection and meta-programming, threads • According to the Ruby FAQ • "If you like Perl, you will like Ruby and be right at home with its syntax. • If you like Smalltalk, you will like Ruby and be right at home with its semantics. • If you like Python, you may or may not be put off by the huge difference in design • philosophy between Python and Ruby."

  3. Ruby on Rails • Ruby on Rails, often abbreviated RoR, or just Rails • open source web application framework written in Ruby • Closely follows the Model-View-Controller (MVC) architecture • Strives for • simplicity • Real-world applications in less code than other frameworks • A minimum of configuration – “convention over configuration” • What does that mean? • Ruby allows for extensive metaprogramming • Results in a syntax that many of its users find to be very readable • DHH • Ruby on Rails was extracted by David Heinemeier Hansson (DHH) • From his work on Basecamp • It was first released to the public in July 2004. • The current release is 1.2.1

  4. Programming Language Book Trends

  5. Ruby on Rails Shortcomings • Hidden complexity • l “Hitting the wall” when automagic stuff fails • Typical development: 10 minutes reading manual, 1 minute coding, • 10 minutes troubleshooting • Ruby is slow • its dynamic nature makes it difficult to compile at all • Need to use external libraries/processes for compute-intensive things • Does not interface well with existing database schemas • Either migrate data into new schema or make do with rough edges • Rails is single-threaded • Run multiple instances, but need to work around pitfalls

  6. Agile Web Development with Rails, 2nd edition • Dave Thomas, Mike Clark and DHH • Reference “Rdoc” from api.rubyonrails.org • Programming Ruby • 1st edition available on the web • Ruby Tutorials • http://tryruby.hobix.com

  7. DB Migrations • Transform the database class FixRestaurants < ActiveRecord::Migration def self.up rename_column(:restaurants, :adress, :address) end def self.down rename_column(:restaurants, :address, :adress) end End • Rake tasks (rake = ruby’s make) • Rake migrate – applies all new migrations to database • Rails stores the latest migration version in a schema_info table • Rake migrate VERSION=3 – applies migrations forwards or • backwards to arrive at migration 3

  8. Model, View, Controller • What does this mean?

  9. Design Pattern • A problem and its solution that occurs so frequently that there is a well established way to solve it • Model, View, Controller • Maybe the most common of these

  10. Model / View / Controller • A web application is a good example. It has 3 parts: • The data model (model) • Mapping between relational database and objects • Ensuring that the data remains valid & consistent • May be used outside the web app • The business logic (controller) • Accepts a request, validates it, decides what happens next • Implements the core application logic • Fetches or calculates the data to be shown next • The presentation layer – generating HTML (or …) (view) • Produces the HTML mark-up from data provided by business logic • Often created by non-programmers (web designers)

  11. Model / View / Controller (cont) • Generally … • Models • One model per database table • Use an explicit join table & model for many-to-many relationships • Views • One view per response • Often view uses several partials, reusable page fragments • Std scaffold creates 4 views + 1 partial per controller • Controllers • One per model, sometimes more • One per list/show/edit/search page-set • Scaffold demo • script/generate scaffold Bank

  12. Rails Scaffolding: 7 Actions • Index/list • List all items • New • Display empty form for new item • Create • Create item based on “new” form • Show • Display item • Edit • Display item in form for editing • Update • Update item based on “edit” form • Destroy • Delete item

  13. URLs, controllers, actions, IDs • Rails provides routes to map URLs to actions • From routes.rb: • # Install the default route as the lowest priority. • map.connect ':controller/:action/:id' • URLs are divided into parts by “/” • Query string or POST parameters • Parsed by default into params hash • http://host/restaurants/list?city=isla+vista&state=ca • params[:city] == “isla vista” • params[:state] == “ca”

  14. Views – .rhtml / ERb • “Embed ruby into HTML” <% restaurant.ratings.each do |rating| %> <p><span class=“score”><%= h rating.score %></span> by <span class=“user”><%= h rating.user.nickname %></span> </p> <% end %> Restaurant.ratings.each do |rating| puts ‘<p><span class=“score”>’ puts h(rating.score) puts “</span>\nby\n<span class=\“user\”>” puts h(rating.user.nickname) puts “</span>\n</p>” end

  15. View variables • Variables available in a view • When an action terminates, an auto-generated wrapper calls • render :file => “controller/action” • Unless the action called render explicitly • render is a method of the controller • => all controller instance variables are in scope • hence idioms such as: • @restaurant = Restaurant.find(params[:id])

More Related