Upload
husnara-mohammad
View
100
Download
0
Embed Size (px)
Citation preview
A programming language Developed by Yukihiro Matsumoto (aka
Matz) in the 1990s
Initially developed by David Heinemeier Hansson, out of his work on Basecamp, a project management system
It is a framework of scripts in ruby that provide for rapid development of web applications, esp those with a database back end
Rails can build the skeleton of an application, including the database tables, in just a few commands
Ruby is largely and loosely based on perl (hence the name, according to lore)
Completely object oriented
Unlike PHP, scope in variables is defined by the leading sigil◦ the $ sign denotes global scope, not a variable◦ an @ represents local scope within an object
instance◦ @@ represents local scope within a class
A capitalized name is a constant
Javascript--born of the competition between two companies
PHP--created by a varied community Ruby--the vision of a single person Rails--the vision of another single person When you compare these, you can see
how the starting point influences the process of development
Ruby is an interpreter, just like php or bash:Avatar:~ hays$ rubyprint "howdy world!"^d
Or, use ruby -e "command":ruby -e 'puts "hello\n"'
Or, you can just use irb, which is easier:Avatar:~ hays$ irb>> print "howdy world!"howdy world!=> nil>>
Truly Not a prototyping language like javascript Nor a procedural language with OOP bolted
on
A class is a kind of master object Can contain constants and methods Instances of object can be created from a
class, inheriting the traits of the class
class Catend
(but this class doesn't do or mean anything)
the class examples are derived from http://www.juixe.com/techknow/index.php/2007/01/22/ruby-class-tutorial/
I want four attributes for a cat; name, color, type, and attribute
class Cat # must be capitalized attr_accessor :name, :type, :color, :attribute
def initialize(name, type, color, attribute) @name = name @type = type @color = color @attribute = attribute end
Now, I can create an instance of the cat class:gc = Cat.new("GC", "short hair", "black", "gimpy")lc = Cat.new("LC", "short hair", "black", "little")
I'd like to be able to describe my cats easily So I add a method to the cat class:
def describe @name + " is a " + @color + " " + @type + " who is " + @attribute + ".\n" end
The concatenation is a bit awkward Like php, ruby has a structure for calling
variables within a string:"#{@name} is a #{@color} #{@type} who is #{@attribute}.\n"
If I call a cat with the describe method attached, I can get the description of that cat: my_string= gc.describe puts my_string
or: puts gc.describe
A second method, find_by_name:def self.find_by_name(name)
found = nil ObjectSpace.each_object(Cat) { |o| found = o if o.name == name } found end
Methods in a class are public by default Private methods are known only to the
individual object Protected methods can only be called by
members of the class in which is was defined
In ruby, vars are references to objects, not objects themselves
So:a = "my value"b = a
a[0] = "n" will change both a and b--but if you
reassign a, eg a="new value", a is linked to a new object (this might bite you, but it's not likely)
Create an array by assignment:my_array = [ "one", "two", 3, 4 ]
Referencing the array:puts "my_array[0] is: #{my_array[0]}\n"
The brackets are methods of the array class…
What in php is called an associative array is called a hash in ruby
Creating a hash by assignment:my_hash = { 'tree' => 'pine', 'bird' => 'mocking'}puts "\n"puts "my_hash['tree'] is: #{my_hash['tree']}\n"puts "my_hash['bird'] is: #{my_hash['bird']}\n"
Notice that the syntax is different
use the each method:
a = 1 my_hash.each do |key, value| puts "#{a} #{key} is: #{value}" a = a +1 end
much like php and javascript, but simpler syntax:
a = 1 my_hash.each do |key, value| if key == "tree" puts "#{a} #{key} is: #{value}" end a = a +1 end
Ruby's syntax is pretty Ruby is all about structure Classes are easy to work with, if you're new,
start with simple examples
Layering again MVC allows a project team to work on
different aspects of the application without stepping on each other's toes quite so often
Note that neither PHP nor Javascript encourage this, but it can be done in PHP (not so much in Javascript)
Rails enforces MVC
Contains the data of the application◦ Transient◦ Stored (eg Database)
Enforces "business" rules of the application◦ Attributes◦ Work flow
Provides the user interface Dynamic content rendered through
templates Three major types
◦ Ruby code in erb (embedded ruby) templates◦ xml.builder templates◦ rjs templates (for javascript, and thus ajax)
Perform the bulk of the heavy lifting Handles web requests Maintains session state Performs caching Manages helper modules
Notion that coding is reduced if we adopt a standard way of doing things
Eg., if we have a class "Pet" in our model that defines the characteristic of domestic animal, in rails, the database table created for us will be named "pets"
Other chunks of code look for each other by their common names
Since views and controllers interact so tightly, in rails they are combined in Action Pack
Action pack breaks a web request into view components and controller compoents
So an action usually involves a controller request to create, read, update, or delete (CRUD) some part of the model, followed by a view request to render a page
The basic url used to access a controller is of the form: http://server/controller/action
The controller will be one you generate, and the action will be one you've defined in your controller
So if you have a controller named "filer" and that controller has an action named "upload", the url will be something like http://127.0.0.1/filer/upload
The controller will have a folder in app/view named after it, and in that will be the view templates associated with the action methods
These templates are usually html with some inserted ruby code
While code can be executed in these templates, keep that simple--any data controls should be made in the controller's files
Three commandsrails democd demoruby script/generate controller Bark
This creates the framework
A def in the app/controller/bark_controller.rb file:def helloend
And some html in the app/views/bark folder, hello.html.erb:
<html><head></head><body><h3>Howdy</h3></body></html>
app: most of your code lives here config: information environment and
database link◦ database.yml◦ development, test and production versions
doc, log, tmp lib: your code, just a place to stick things
that don't have a good home elsewhere
public: images, javascripts, stylesheets go here
script: script that rails uses, most of these are short and reference files in the lib dir for rails
vendor: 3rd party code
Magic
rails tempcd temprake db:create:allruby script/generate scaffold Person lname:string fname:string email:stringrake db:migrateruby script/server