28
CÁC VẤN ĐỀ HIỆN ĐẠI CA CÔNG NGHPHN MM Chủ đề: Tng quan vngôn ngRuby Ging viên: TS. Trương Anh Hoàng Thành viên: NhTun Anh Đào Đức Thnh Đàm Thái Nhiên Hà Ni 01/10/2012

[Bluebee-UET.com]212240132-Ruby-on-Rails.pdf

Embed Size (px)

Citation preview

  • CC VN HIN I CA CNG NGH PHN MM

    Ch : Tng quan v ngn ng Ruby

    Ging vin: TS. Trng Anh Hong

    Thnh vin:

    Nh Tun Anh

    o c Thnh

    m Thi Nhin

    H Ni 01/10/2012

  • Mc lcChng 1: Ngn ng lp trnh Ruby .............................................................................................. 4

    1. Lch s hnh thnh.....................................................................................................................4

    2. Gii thiu v ngn ng ruby .....................................................................................................4

    3. Xem mi th nh hng i tng .......................................................................................... 4

    4. Ruby l mt ngn ng mm do v linh hot ...........................................................................5

    Chng 2: Ngn ng Ruby............................................................................................................. 6

    1. Bin trong ruby .........................................................................................................................6

    2. Cc dng d liu trong ruby......................................................................................................6

    2.1. S .......................................................................................................................................6

    2.2. K t ..................................................................................................................................6

    3. Mng trong ruby........................................................................................................................7

    4. Cu trc iu khin trong ruby .................................................................................................7

    5. Vng lp trong ruby ..................................................................................................................9

    5.1. While..................................................................................................................................9

    5.2. Util .....................................................................................................................................9

    5.3. For......................................................................................................................................9

    5.4. Cu trc lit k...................................................................................................................9

    5.5. Hash .................................................................................................................................10

    5.6. C mt vn trong y l Blocks..................................................................................11

    6. Lp v modules.......................................................................................................................12

    7. Tha k trong Ruby ................................................................................................................14

    Chng 3: Framework Rails ......................................................................................................... 16

    1. Th no l framework .............................................................................................................16

    2. M hnh MVC.........................................................................................................................16

    2.1. Khi qut v m hnh MVC............................................................................................. 16

    2.2. Cc thnh phn ca m hnh MVC..................................................................................16

    2.3. u v nhc im ca m hnh MVC ...........................................................................17

    3. Ruby on Rails.......................................................................................................................... 18

    3.1. Ngun gc ca Rails........................................................................................................18

    3.2. M hnh MVC vi Rails ..................................................................................................18

    3.3. T ng sinh code trong Rails.........................................................................................19

    3.4. Vng i pht trin mt ng dng trong Rails ................................................................ 19

  • 3.5. So snh Ruby on Rails vi Java v PHP .........................................................................20

    Chng 4: Ci t v pht trin mi trng Rails ........................................................................ 22

    1. Cc mi trng c th pht trin Ruby on Rails ................................................................ 22

    2. Cch ci t mi trng pht trin Ruby on Rails..................................................................22

    3. Ci t cng c h tr code.....................................................................................................22

    Chng 5: Nhng vn c th ca Rails.................................................................................... 24

    1. B cng c pht trin .........................................................................................................24

    2. c im c bn vi c s d liu ca Ruby on Rails ........................................................... 25

    2.1. Gii thiu Active Record.................................................................................................26

    2.2. nh gi Active Record vi cc h csdl khc .................................................................26

    2.3. Thao tc s dng Active Record .....................................................................................26

    Chng cui: Tng kt ................................................................................................................. 28

    Ph Lc ......................................................................................................................................... 28

    Ti liu tham kho........................................................................................................................ 28

  • Chng 1: Ngn ng lp trnh Ruby1. Lch s hnh thnh

    Ruby l mt ngn ng lp trnh hng i tng, c kh nng reflection. C php b nh hngt Ada v Perl vi cc c tnh hng i tng ca Smalltalk, v cng chia s mt s c tnhvi Python, Lisp, Dylan v CLU.Ruby c to ra bi Yukihiro Matz Matsumoto t 24 thng 2, 1993 v a ra bn chnh thcvo nm 1995.

    Ruby chu nhiu nh hng t Perl, v khi hon tt ngn ng ny, anh a vi mtngi bn rng nn t tn th no nghe cho n ging mt th qu no (Perl lc u cngc t tn l Pearl - ngc trai). V bn ca anh gi ci tn Ruby. Sau ny Matz cng btng khi pht hin ra Pearl l vin qu tng trng cho nhng ngi sinh thng 6, cn Rubyth tng trng cho nhng ngi sinh thng 7. Anh cho rng ci tn Ruby nh th l ph hp vRuby k tha v pht trin nhiu c tnh t Perl.

    Thng 9 nm 2005, phin bn n nh mi nht l 1.8.3. Ruby 1.9 (vi mt s thay i)cng ang trong qu trnh pht trin.

    2. Gii thiu v ngn ng ruby

    Thay v nh ngha v Ruby ti xin trch nguyn vn li gii thiu v Ruby ca cng ngRuby nh sau: Ruby l mt ngn lp trnh m ngun m, linh hot, vi mt s ni bt v sn gin d dng v hu ch. N c c php tao nh v t nhin d c v d dng vit.V theo nh tc gi ca ngn ng Ruby, anh Yukihiro matz Matsumoto ngi Nht, th tcgi l mt ngi rt a thch cc ngn ng nh: Perl, Smalltalk, Eiffel, Ada, v Lisp. Tc gi c gng kt hp mt cch thn trng cc ngn ng ny vi nhau t to ra Ruby. C lchnh v vy m Ruby l mt ngn ng vi cc cu lnh v c php kh quen thuc khi chc.Mt vi c im nhn thy ngn ng Ruby l:

    Ruby c c php ngn nhng c th lm c nhiu vic. Ruby l ngn ng rt hng i tng.

    3. Xem mi th nh hng i tng

    Vi Ruby, mi th u l mt i tng. Mi bit thng tin hay code u c th c a racho chnh chng vic s hu cc thuc tnh hay hnh ng. Trong lp trnh hng itng th cc thuc tnh gi l cc bin thc th (instance variables) v cc hnh ng gil cc phng thc. Ruby l mt hng i tng tinh khit, iu ny c th thy bngmt bit ca code m thc hin mt hnh ng vi mt con s. S 5 cng c coi l mt i

  • tng v c phng thc lm times. on code di s in ra 5 ln dng We *love* Ruby:5.times{ print "We *love* Ruby" }

    a s cc ngn ng khc, con s v mt s kiu d liu nguyn thy khc th khng c coil hng i tng. Nhng Ruby theo s nh hng ln ca ngn ng Smalltalk bng vica ra cc phng thc v thc th bin ti tt c cc kiu ca n. iu ny to nn s thngnht v d dng khi s dng Ruby vi tt c cc i tng.

    4. Ruby l mt ngn ng mm do v linh hot

    Ruby c coi l mt ngn ng mm do v linh hot, t khi n cho php ngi dng t dosa i c phn ct li ca n. Cc phn ct li ca Ruby c th c ri i hoc nh nghali nh mun. Cc phn hin hu c th c thm vo. Ruby c gng khng hn ch ccnh lp trnh.

  • Chng 2: Ngn ng RubyTrong chng ny s ni qua tng th nhng vn c bn vi Ruby. Cc bn s hiu nhngci c bn nht v Ruby. V cc bn c th thao tc c bn vi nhng vn ca ngn ngRuby.

    1. Bin trong ruby

    Bin ca ruby khng cn khai bo kiu. Khi gn gi tr cho bin n s t ng nhn kiu, nhncc gi tr cho bin.V d:

    User =userPuts user => user

    Khai bo bin ca ruby lm cho ngn ng tr ln linh hot hn.Bin ton cc ca ruby: khi thm @ trc bin th n tr thnh bin ton cc s dng khi tcng trong chng trnh.Cn khi khng c @ th n l bin a phng ch c s dng trong mt phn no cachng trnh.Mi bin ca ruby l mt i tng. Nh vo vn ny, bn c th tc ng n tng vn ca bin: nh chuyn kiu, ghp cc bin vi nhau.Nh c tnh cht trn cc bin trong ruby c th tng tc vi nhau mt cch d dng. V d:

    @u =Ngon ngu{#@u} lap trinh=> Ngon ngu lap trinh

    Cng c th o ngc chui hoc vit hoa

    2. Cc dng d liu trong ruby

    Ruby l mt ngn ng hng i tng. y cc thnh phn d liu t s, k t, mng uc xy dng trn c s cc lp.

    2.1. S

    Cu trc phn cp d liu dng s trong Ruby: Cc dang d liu kiu s c xy dng t lpNumeric. Kiu s nguyn: Integer c hai dng l Fixnum vi di 31 bits v Bignum c di ty . Kiu s thc c th hin qua lp Float. Bn cnh mt s kiu d liu khckhng c sn nhng c inh ngha trong th vin chun ca Ruby.

    2.2. K t

    String l lp dng th hin chui k t. Khc vi Java String trong Ruby l mutable .String trong Ruby c th c khai bo trong du ngoc n hoc ngoc kp. Vi dng chuic t trong du nhy n th k t \ ch c ngha khi sau n l k t \ hoc . Bn cnh

  • chui trong nhy n c vit xung dng th n s c hin th thnh nhiu dng tngng.Vi dng chui trong du nhy kp th nhiu k t c bit c h tr, v d nh \n, \t nhtrong java. Bn cnh chui trong du nhy kp cn c th hin th kt qu ca biu thctrong n thng qua k t #.

    3. Mng trong ruby

    Mng c th khai bo trc tin hoc thng qua i tng Array.V d:Arr= [1,2,3,4,5,6]

    Arr= Array.new

    Cch nh ch s mng trong Ruby c nh t 0 n s phn t -1.

    Ruby vic sp xp cc thnh phn mng kh linh hot v mm do.Ta c th khai bo mng mt chiu gm cc phn t n: arr = [1,2,3,4,5,6].Hoc mng lng: arr = [[1,2],[3,4,5,6],[7,8,9]].

    Hoc mng c trch xut subArr = arr[0,2]#subArr = [[1,2],[3,4,5,6]].Cc mng c th tng tc vi nhau thng qua cc ton t nh +,-,*Vi php + ta c th cng hai mng vi nhau: ar= [1,2,3] +[4] # ar=[1,2,3,4]Vi php tr cc phn t mng mng tr s loi b cc phn t c trong mng b tr.ar= [1,2,3] -[2] # ar=[1,3]

    Vi php nhn, ta c th nhn mt mng vi mt s v kt qu cho ta s phn t mng c lpli theo gi tr c nhn: ar= [1,2,3]*2 # ar= [1,2,3,1,2,3]Cc mng c th nh thm phn t vi php ton

  • end

    elsif

    if

    elsif

    elsif

    end

    unless

    unless

    end

    unless cng c th c s dng vi else nh trng hp ca if.case

    Case trong Ruby khng lng nhng nh trong java ( qun break l c mt vn ri). y cth s dng cu trc elseif a ra khi iu khin ging nh trong khi iu khin case, tuynhin c php case vn thng c s dng nhiu hn.case

    when then

    when then

    when then

    end

    Ch l y nu c nhiu hn mt iu kin ng th hnh ng ca iu kin u tin sc thc hinV dx=1

    a=case

    when x>0 then

    puts "x is 1"

    puts "hehe"

    when x==2 then puts "x is 2"

    when x

  • hehe

    nil

    * cu trc ?: trong Ruby ging nh trong java nhng c m t nh cu trc if vi ? l then v: l else

    Ruby cng cung cp h tr mt s t kha h tr iu khin cu trc chng trnh nh: return,break, next

    5. Vng lp trong ruby

    5.1. While

    While do begin

    End while

    5.2. Util

    Util do begin

    End end

    Util

    5.3. For

    for in do

    end

    5.4. Cu trc lit k

    + Vi i tng supto/downto

    0.upto(9){|s| print s}

    times

    10.times{|s| print s}

    step

    0.step(9,1){|x| print x}

    + Vi Array, Rangeeach

    (1..9).each{|s| print s}

    Result: 123456789

    collect

    result = (2..4).collect{|s| s*s*s}

  • puts result

    Result:

    8

    27

    64

    select

    positive = [1,-2,3,4,-9].select{|s| s>0}

    puts positive

    Result:

    1

    3

    4

    reject

    negative = [1,-2,3,4,-9].reject{|s| s>0}

    puts negative

    Result:

    -2

    -9

    5.5. Hash

    Mng Hash cng khng c g c bit so vi cc mng thng thng. Thay v mng Array chchp nhn cc ch s (index) l dng Integer th mng Hash chp nhn bt k Object no vnc xem nh mt ch sV d: vi mng Arraypersons = ["Ho Chi Minh","Nhan vat lich su","yeu nuoc"]

    Gi s nu mun bit chnh xc tn nhn vt l g, xp loi nhn vt, tnh cch l g , th phicn ti class Hashpersons = {

    "ten"=>"Ho Chi Minh",

    "xep loai"=>"Nhan vat lich su",

    "tinh cach"=>"yeu nuoc"

    }

    Vi mng Hash, ta c persons[xep loai] = "Nhan vat lich su"Mng Hash khng s dng ch s (index) truy vn d liu m s dng t kha (clef) linkt vi d liu lin quanMng Hash cng ging nh mng Array nn c tha hng phng thc eachpersons = {

  • "ten" => "Ho Chi Minh",

    "xep loai" => "Nhan vat lich su",

    "tinh cach" => "yeu nuoc"

    }

    persons.each do |clef,value|

    puts clef + "=>" + value

    end

    5.6. C mt vn trong y l Blocks

    Trong qu trnh s dng cc cu trc lit k, chng ta thng thy mt nhm cc cu lnh nmtrong cp ngoc nhn hoc trong long khi begin/end. Ngi ta gi l block. Thngthng block bao gi cng c thc hin sau li gi hmV d:10.downto(0){|x| print x}

    y khi |x| print x c thc hin sau li gi hm v l block. Theo quy c th vi viblock trong phm vi mt dng ta nn dng ngoc nhn cn vi block c nhiu dng ta nn sdng do .. endCh l trong block, gi tr tr v c thng qua cu lnh next ch khng phi l return (chtr v gi tr cho hm ng).

    Cu trc hm trong Ruby

    def ()

    V d:def squareRootOf(n,loop)

    ini = n/2

    loop.times {ini = (n/ini + ini)/2}

    return ini

    end

    Mt im c bit y l nhiu gi tr c th ng thi c tr v trong mt phng thc.Cc gi tr tr v s c tp hp trong mt mng.V d:def multiValuesReturn()

    return 1

    end

    arr = multiValuesReturn

    arr.each {|x| print x}

    procs v lambdas

  • procs v lambdas l hai cch thc a blocks vo trong i tng. Ty thuc vo cch mi tng c to ra ta s c procs haylambdas.To procsdef createProcs(&p)

    p

    end

    exp = createProcs{|x,y| x**y}

    Hocexp = Proc.new{|x,y| x**y}

    Gi procsputs exp.call(2,3)

    To lambdasincre = lambda{|x| x+1}

    hocincre= ->(x){x+1} # ruby version 1.9

    hocincre=->(x;step=2){x+step} # Mt tham s x v bin ni b stepGi lambdasputs incre.call(2)

    Closures

    Closures l mt khi nim ch mt hm s dng mt bin gii hn. Thng thng closures dng ni n hm lng. hm bn trong s dng bin c khai bo bi hm cha n. Ruby, khi nim ny thng c th hin bi cc khi lambdas hoc procs.V ddef mainFunction(n,m)

    lambda{|x| x*n/m}

    end

    myLambda = mainFunction(2,4)

    puts myLambda.call(2)

    Kt qu y l 1

    6. Lp v modules

    L mt ngn ng hng i tng, khi nim lp l thnh phn c bn trong Ruby. Lp ckhai bo nh sau:class

    end

  • Khi to class.new

    Hm khi to trong lp. ( ging nh hm to v khi to gi tr trong java)def initialize(,)

    end

    i vi cc hm vic xc nh kh nng truy cp c thng qua cc tkha public , private, protected ging nh Java. Tuy nhin Java chng ta c thm default vc coi nh mc nh trong khai bo cn y public c coi l mc nh trong khaibo. Public cho php cc hm c truy nhp t bt k u trong khi private ch cho cc hmc truy nhp t cc thnh phn khc trong lp v cc lp con can, protected ging private ch khc ch cc hm protected c th c gi bi cc thc thca chnh lp hoc vi sefl.class Test

    private

    def myTest()

    puts "test"

    end

    protected

    def proTest()

    puts "pro"

    end

    public

    def testTest()

    theTest = Test.new

    theTest.proTest()

    end

    def testPrivate()

    theTest = Test.new

    theTest.myTest()

    end

    end

    a = Test.new

    a.testTest()# =>pro

    a.testPrivate()#=> error in red as below

    Kt qu:pro

  • HelloWorld.rb:20:in `testPrivate': private method `myTest' called for #(NoMethodError)

    from HelloWorld.rb:28

    Bn cnh Ruby cc bin trong lp u c t l private, trong khi cc hng s ul public.

    7. Tha k trong Ruby

    L ngn ng hng i tng nn Ruby c y cc tnh cht nh tnh a hnh, ng giv k thaclass Parent

    def printOut

    puts "This is Parent class"

    end

    end

    class Child

    def printOut

    puts "This is Child Class"

    end

    end

    Modules

    Modules l nhm cc thnh phn hm, bin, hng s v chy c lpmodule MyModule

    def MyModule.intro

    puts "This is the intro of modul"

    end

    def MyModule.sayHello

    puts "Hello"

    end

    end

    class MyClass

    include(MyModule)

    def sayHello

    MyModule.sayHello

    end

    end

    myClass = MyClass.new

    myClass::sayHello

  • Mt chng trnh c th gm nhiu file, v vi ngn ng script nh Ruby th vic phn chiachng trnh thnh cc file cha cc module khc nhau.Cc file ny sau c th c s dngthng qua li gi require hoc load trong chng trnh chnh.

  • Chng 3: Framework Railsn vi chng ny cc bn c th bit c th no l mt framework, m hnh kin trc can, nhng c im ca framework Rails v nhng nh gi ca n vi cc framework khc.

    1. Th no l framework

    Framework l nhng th vin code, c thit k gip trong vic pht trin phn mm.Framework to ra mt b ng dng thit k da vo nhng th vin pht trin theo ngn ng to ngi lp trnh d dng pht trin nhng phn mm mt cch nhanh nhng v hiuqu.

    Khi pht trin mt phn mm da vo mt framework no th vic pht trin n tr ln thunli vi ngi lp trnh bi v n gim bt thi gian tp trung vo vic code hn c th tptrung vo vic gii quyt nhng vn lin quan n logic iu lm tng hiu qu ca ngilp trnh.

    2. M hnh MVC

    Ngy ny cc framework v thit k website hu nh u s dng m hnh MVC pht trin.vy m hnh ny c nhng c im g m cc framework c s dng n pht trin nhvy?

    2.1. Khi qut v m hnh MVC

    MVC l vit tt ca Model View Controller. N l mt kin trc phn mm hay m hnhthit k c s dng trong k thut phn mm, gip cho ngi lp trnh tch ng dng ca hthnh ba thnh phn khc nhau Model, View v Controller. Mi thnh phn c mt nhim vring bit v c lp vi thnh phn khc.

    2.2. Cc thnh phn ca m hnh MVC

    Di y l s ca m hnh MVC:

  • Cc thnh phn trong m hnh MVC c mi quan h cht ch vi nhau. Cc thao tc ca nc lp li mi khi tip nhn yu cu ca ngi dng.Nh hnh trn c th thy m hnh MVC gm 3 thnh phn chnh: Model, View v Controller.Model:

    Gm mi hot ng lin quan n c s d liu, cc thao tc vi c s d liu u c thchin y gm: chun ha, phn tch nh giView:

    Phn ny lin quan n ngi dng. N l phn hin th vi ngi dng. N a thng tin cth n vi ngi dng mt cch c th nht. V n cng nhn tng tc gia ngi dng v hthng .Controller

    Controller chu trch nhim phn phi ng dng. N nhn s kin t bn ngoi, ri tng tcvi Model x l thng tin. Sau khi x l tc ng lin quan n h thng th n truyn nView hin th vi ngi dng.Nh vy d dng thy rng s tng tc gia cc thnh phn trong m hnh u thng quacontroller. Controller l cu li gia View v Model. N iu khin d liu ri sau a ranhng thng tin cn thit cho ngi dng.

    2.3. u v nhc im ca m hnh MVC

    u im ca m hnh MVC: M hnh MVC lm tng kh nng pht trin v m rng ng dng. M hnh MVC khin cho vic bo tr tr ln d dng hn: v cc thnh phn ph thucthp vi nhau, v vy khi thay i mt ci th khng nh hng n ci khc.

  • Cc thnh phn trong m hnh MVC c s dng li: v d mt model c th s dngcho nhiu phn hin th v ngc li cng vy. M hnh MVC c th phn tn: s chia s cch bit v code gia cc thnh phn c ngha l mi thnh phn trong chng c th trn mt my tnh ring, nu thy cn thit. Nhc im ca m hnh MVC: i vi d n nh p dng m hnh MVC gy cngknh, tn thi gian trong qu trnh pht trin v tn thi gian lun chuyn qua cc tng.

    3. Ruby on Rails

    3.1. Ngun gc ca Rails

    u tin, ti mun gii thiu vi cc bn ngun gc hnh thnh framework Ruby on Rails.Rails ra mt cng chng ln u tin vo nm 2004, Rails thot u c dng nh l nntng cho mt cng c qun l d n c t tn l Basecamp v c to ra bi nhpht trin web David Heinemeier Hansson, mt nhn vin ca cng ty pht trin web37signals (M). Ban u h xy dng Rails khng phi vi mc ch l xy dng ra mtframework ring, ch tm ban u l dng n xy dng cc ng dng khc ca 37signals.Sau Heinemeier Hansson thy tim nng ca n gip cho anh y lm cc cng vic d dnghn bng cch rt ra cc tnh nng ph bin nh tru tng c s d liu v khunmu(template) bn trong, v sau n tr thnh phin bn u tin c tung ra ca Ruby onRails.

    Trn thc t Rails c rt trch t Basecamp, mt chng trnh m c cng ng Railscho l trong qu trnh lm chng trnh th gp v gii quyt c rt nhiu cc vn phc tp. V Rails, mt framework bt ngun t chng trnh th n tha k cnhng sc mnh t d n . V vy Rails lun sn sng c th gii quyt c cc vn thc t tn ti trong qu trnh pht trin web. Ngoi ra, ban u Rails c xy dng ra cn vimc ch l xy dng cc ng dng khc t n, bi vy Rails trc khi xut hin trnth gii th n chng minh c bn thn n l mt framework rt hu dng, cht ch vton din.

    Sau khi phin bn u tin c tung ra th cng ng Rails cng ng gp b sunghng m rng n, v sa cc li c tm thy. V phin bn mi nht ca Rails by gi lphin bn 2.0.2.

    3.2. M hnh MVC vi Rails

    Hin nay m hnh MVC ang c s dng hu ht cc framework pht trin ng dng web.Rails cng khng l ngoi l. Rails d trn m hnh MVC pht trin framework ca mnh.Cu trc ca m hnh MVC rt r rng. iu ny lm cho ngi lp trnh dng pht trinng dng ca mnh.Hin ti chng ny gii thiu nhng vn c bn ca Rails nn mnh ch ni s qua phn ny

  • y lm r c m hnh m framework x dng. Cn v cc mc sau mnh s lm rnhng tc ng c th ca m hnh MVC i vi Rails.

    3.3. T ng sinh code trong Rails

    Ta cng c th ni n Rails vi vic sinh code t ng. Khi bn pht trin trn Rails, ccc th mc hay file l ni bn in code vo, v tt c cc phn trong ng dng ca bntng tc vi nhau trn mt cch thc chun. Hay n chun b sn mt b khungchng trnh trc cho bn, iu ny gip bn n gin l ch vic in cc on code loginvo trong ng dng v tch kim v gim ti cng vic ca bn. V nh c b khung nhngha sn ny, Rails cung cp cc generate, rake, script cho php bn nhanh chng to, xa ramt s template bn nh ngha model, view ,controller, hay ngay c database trong c sd liu.

    3.4. Vng i pht trin mt ng dng trong Rails

    Rails ng vin s dng cc iu kin khc nhau cho mi giai on trong chu trnh vng ica ng dng(pht trin,kim tra, v sn phm). Nu bn hon thnh vic pht trin ngdng web trong mt khong thi gian, y c l l cch bn thc hin. Rails ch hp thcha cc mi trng ny.

    Development trong iu kin development, thay i ti code ngun ca ng dng ngay lptc; tt c chng ta cn lm l load li trang tng ng trong trnh duyt. Tc khng phil yu t quyt nh trong iu kin ny; Thay v vy, mc tiu l cung cp cho ngipht trin nhn xuyt sut cc thnh phn c lin quan n vic hin th trn mi trang web.Khi mt li xy ra trong iu kin pht trin, cc nh pht trin c th nhn thong qua bitdng code no gy ra li, v nh th no dng c gi ti. Kh nng ny c cung cpbi stack trace(bao gm y cc danh sch cc phng thc gi chun b cho li),ci ny c hin th khi mt li khng trng i xy ra.

    Test Trong iu kin kim tra, chng ta thng lm mi(refresh) c s d liu vi mtranh gii ca d liu gi cho mi ln kim tra c lp li-iu ny m bo rng kt quca cuc kim tra l nht qun, v cch x l l c kh nng tng thm. Unit v cc thtc kim tra l t ng ha han ton trong Rails. Khi chng ta kim tra ng dng Rails,chng ta khng xem n s dng mt trnh duyt web truyn thng. Thay v vy, cc cuckim tra c gi t cc dng lnh, v c th chy di background. iu kin kim tracung cp mt mi trng chuyn dng x l cc hot ng em li hiu qu.

    Production Giai on m ng dng ca bn hon thnh, khi m cc kt qu kim tra ltt, cc li c loi ra. Khi vic thay i code l rt him, iu ny c ngha l mitrng sn phm c th lc quan tp trung vo vic s dng. Nhim v nh vit s lngln cc log cho mc ch g ri l tr nn khng cn thit khi ny. Tuy nhin, nu mt li

  • xy ra, bn khng mun lm ngi dng s hi vi nhng thng bo du vt kh hiu(n chtt trong giai on pht trin).

    Vi cc nhu cu khc nhau cho mi iu kin,giai on, Rails lu tr d liu cho mi iukin trong cc d liu c tch bit hon ton. Bi vy, ti bt k thi im no, bn cth c:

    D liu trc tip vi ngi dng thc s tng tc trong mi trng iu kinsn phm.

    Mt bn copy ca d liu trc tip m bn s dng g ri li hay pht trintnh nng mi trong mi trng iu kin pht trin.

    Mt b d liu kim tra m bn c th lin tc lm vic load li trong mi trngiu kin kim tra.

    3.5. So snh Ruby on Rails vi Java v PHP

    nh gi mt framework, ngi ta s da vo 4 yu t: tc pht trin (Dev Speed), khnng bo tr (maintainability), cng c h tr (Dev Tools)v kh nng m rng thay i(Scaling). Nh vy theo lc nh gi trn, c th thy mi framework c nhng im mnh yu ring. Vi RoR, l tc pht trin v kh nng bo tr. Vy u mi l yu t quantrng nht trong 4 yu t trn nh gi mt framework nn c s dng nht. Theo nhTim Bray v nhiu chuyn gia, th l tnh bo tr, bi mt ng dng khi c xy dng th as n s c s dng trong thi gian di, hn th na thc t cho thy chi ph cho cng tc botr lun l khng nh. Mt khc, vi s h tr ca m hnh MVC, d hiu v di ca codecng c ci thin hn so vi PHP v Java.

  • Ngoi 4 yu t trn, c th nu thm cc yu t c th sau nh hng ti tm quan trng caRoR so vi cc framework khc. l gii php m ngun m v kh nng thng mi. Vigii php m ngun m, RoR dung ha tnh d hc ca PHP v cu trc cht ch ca Java.Cn v kh nng thng mi, cc nn tng J2EE v .NET hin ang c s dng trong cccng ty ln vi tnh nng n nh v s an ton cht ch trong vic qun l khi lng ln dliu. RoR c th m bo nhim v tng t vi gi thnh h.

  • Chng 4: Ci t v pht trin mi trng RailsNh chng trc cp n vn framework ni chung v mt s nhng iu c bn linquan n framewoerk Rails. Chng ny cp n cc ci t pht trin mt mi trng hc cng nh chy ngn ng trn Rails.

    1. Cc mi trng c th pht trin Ruby on Rails

    Hu nh mi mi trng u c th pht trin framework. Bn c th ci t n trn h iuhnh Window, Linux v Mac.

    Nhng hin nay hc tp v pht trin mt trang web cc nh lp trnh thng s dng Linuxhoc Mac. c mt server thc thi mt h thng pht trin bng Rails ngi pht trin thng chnsever Linux.

    2. Cch ci t mi trng pht trin Ruby on Rails

    y ti hng dn cc bn ci t mi trng pht trin Rails trn Windown

    B1: Truy cp vo trang web railsinstaller.org v download gi web the kit .

    B2: Chn ci t gi va ti v bng kch p vo .Chn next sau l chn install chngtrnh.

    B3: B tch nh du khi dng Configure git and ssh when installation has completedvchn finish.

    B4: T mn hnh cmd bn g: rails new project1 n enter.

    B5: Di chuyn vo th mc project1 v g: rails s v enter.

    B6: Bn dng trnh duyt bt k g vo a ch: localhost:3000 nu mn hnh nu mn hnhhin th welcome aboard tc l bn ci t thnh cng.

    3. Ci t cng c h tr code

    B1: Bn download cng c sublimetext ti trang http://www.sublimetext.com/.

    B2: Ci t sublimetext .

    B3: Sau khi ci t xong sublimetext ta di chuyn vo th mc ci t mc nh l:C:\Program Files\Sublime Text 2

    B4: Copy file sublime_text.exe vo chnh th mc v i tn l subl

    B5: Copy ng dn th mc cha file subl.

  • B6: Kch phi chut vo "My Computer", chn "Advanced System Settings", chn"Environment Variables", ko xung v tm "Path", chn "Edit". Thm ";" vo cui ca dng vdn ng link va ri vo .

    B7: Khi ng li Command line v chn ng dn project : g subl m Sublime text.

    Khi hon thnh xong cc mc trn bn to thnh cng mi trng pht trin v cng c htr code. n y bn c th hc v pht trin mt ng dng web bng framework Rails.

    By gi khi hon thnh mi trng pht trin v c nhng kin thc c bn v ngn ngRuby th bn c c th tm hiu nhng vn pht trin Ruby on Rails

    Cn nu khi bn mun thc thi mi trng Rails trn mt h thng khc bn c th xem thmti mc 3 ca ti liu kham kho.

  • Chng 5: Nhng vn c th ca Rails1. B cng c pht trin

    Rake: l mt cng c xy dng vit bng Ruby, C mt s khc bit ln gia Rake v nhngcng c khc.Tt c cc cng vic c vit bi chnh ngn ng Ruby. V vy, n c thahng tnh linh hot, y v c th tn dng li th ca mt s tnh nng tt ca Ruby.

    Ci t: ci t Rake, t cmd ta g lnh : gem install rake v enter .

    Chc nng:

    Rake h tr cc m hnh quy tc tng hp cc nhim v ngm. Ngi dng c th xc nh cc nhim v vi iu kin tin quyt. Mt th vin cc nhim v ng gi sn thc hin xy dng rakefiles d dng hn. FileLists kh linh hot hot ng nh mng nhng vn hiu cc thao tc tn tp tin v

    ng dn.Cc h tr nhim v : Di chuyn n th mc cn kim tra , g lnh : rake --tasks

    + Mi mt danh sch cc nhim v c sn ca rake to ra ph thuc vo th mc bn kim tra.

    + Cc nhim v thng l lin quan n database, xa sa to mi, clean b nh cache.

    Cc h tr nhim v chnh:

    + rake about: Thng tin v cc phin bn cng nh ci t phin bn ang ci sn trn mybn tin cho vic chnh sa , update .

    + rake assets: C 2 chc nng l clean xa b nhng assets compiler , v compiler nhngassets hin ti .

    + rake db: Tng hp cc nhim v c sn ca rake vi database nh to, xa sa , rollbackrt hu ch khi x l x c vi db.

    + rake doc: l mt cng c h tr vic to ra nhng ti liu hng dn cho cc ng dng cabn, ti liu API .N c tch ra lm cho code ca bn tr ln n gin.

    rake doc:app : To ra cc ti liu hng dn cho cc ng dng ca bn trong doc/ app.

    rake doc:guides : To ra cc hng dn rails trong doc/guides .

    rake doc:rails : To ra cc hng dn rails api trong doc/api.

    rake doc:plugins : To ra cc ti liu api cho tt c cc plugin c ci trongdoc/plugins.

    rake doc:clobber_plugins : Loi b tt c cc ti liu to ra cho plugins.

  • + rake notes : Hm tm kim thng qua code ca bn v bt u vi cc t kha FIXME,OPTIMIZE or TODO . N c th tm kim trong cc file c phn m rng .builder, .rb, .erb,.haml and .slim.

    + rake routes: Cung cp tt c cc ng dn v nh tuyn c sn trong code ca bn bnc th hnh dung v tng th .

    + rake test: Cng c c sn unit, n h tr to ra cc bn test c sn v kim tra tnh n nhca ng dng.

    + rake tmp: trong rails ta c file Rails.root/tmp lu tr cc file tm , process id ang dngv cc hot ng din ra. Rake tmp h tr dn dp file ny gii phng b nh.

    rake tmp:cache:clear : xa b tmp/cache

    rake tmp:sessions:clear : xa b tmp/session.

    rake tmp:sockets:clear : xa b tmp/sockets

    rake tmp:clear : xa ton b c 3 file trn .

    Bundler: Bundler l mt cng c duy tr mt mi trng ph hp cho m code ca mt nhpht trin trn tt c cc dng my. Khi m code ca mt nh pht trin c trin khai trn ccmy khc nhau, nhng th vin trc y ca nh pht trin c th thay i theo mi trng icng my. iu ny ph v ng dng ca nh pht trin. Bundler m bo rng cc th vin svn nh c, ghi hnh tt c mi th li vi nhau pht trin ng dng chy rt tt trn mimy, ni m n c trin khai. y bundler gip ta qun l v s dng gem trc tip trnRubygems.org hoc mt s trang khc .

    Gem: l mt gi th vin ca Ruby.

    Ci t bunlder:

    B1 : Trong th mc gc ca app , chn gemfile v ty chnh ci t theo mong mun , chnnhng gi gem h tr app ca mnh nh jQuery JavaScript library, giao din Ruby choSQLite database.Bng cch xa k t # trc nhng gi cn thit v thm phin bn canhng gi . Hoc bn c th tm nhng th vin ca ci t trong Gem.

    B2: Sau khi lu file Gem bn c th dng lnh bundle install ci t n vo ng dng camnh. V tin hnh s dng th vin .

    2. c im c bn vi c s d liu ca Ruby on Rails

    Rails l mt Framework h tr kh y cc cc ng dng lin quan n qun tr c s dliu (csdl) nh xampp, wamp ...Trong qu trnh pht trin ca Rails, bn thn Rails cng trutng ha csdl thng qua mt tng lin kt l Active record . y l mt thnh phn cho php

  • iu khin s tng tc qua li gia ng dng vi c s d liu v l b no trung tm caRails.

    2.1. Gii thiu Active Record

    Active Record l mt tng nh x quan h vi i tng cho php cc bng nh x ti cc lp,cc hng ti cc i tng v cc ct ti cc thuc tnh. Tc l thay v lm vic vi csdl thngthng qua hng ct, thng qu Active Record ta s lm vic vi lp, i tng, thuc tnh.

    2.2. nh gi Active Record vi cc h csdl khc

    u im: + Thng qua vic Rails t ng thm vo cc thuc tnh theo cc ct csdl th vic chnh r thuc tnh theo cc hng khc nhau l khng cn thit .

    + C th khng cn s dng ngn ng SQL lm vic vi csdl m c th s dng duy nhtmt ngn ng l Rails to s ng nht cng nh d dng trong vic lp trnh.

    + T ng tm kim Primary key v Foreign key khi xy dng csdl v vic lin kt gia ccbng cng c lm t ng.

    Nhc im : + Hn ch ca Active Record l do i theo mt chun mu sn khi khi to dliu nn vic thay i ty bin l khng th .

    + Do s lin kt gia cc bng l t ng v khng do ngi ci t nn vic lin quan nchnh sa csdl tr ln phc tp hn.

    2.3. Thao tc s dng Active Record

    a. Xc nh mi quan h

    C 3 loi mi quan h: 1-1, 1 - nhiu, nhiu nhiu.

    Quan h 1 - 1:

    Quan h 1 nhiu :

    Quan h nhiu nhiu :

  • b. Ly i tng

    Active record h tr vic ly i tng thng qua vic vi

    Model.method

    vi Model l bin nh x tn ca bng method l cc hm nh sn nh find , first , last , first!,last!.

    Ly d liu c primary key l 1 :

    Model.find(1); select * from Model limit 1

    Ly d liu c promary key t 1 -> 10

    Model.find([1,10]) SELECT * FROM clients WHERE (clients.id IN (1,10)

    i vi nhng khi d liu ln , ta s dng find_each v find_in_batches vi vic ly nhiunhiu bn khi v ghi ra khi c th gi v s dng d dng.

    Find_each : vi batch_size l s lng h s c ly ra chuyn vo tng l s l

  • Chng cui: Tng kt y nhm s tng kt cc vn trong phin bn bo co ny:

    Cc bn hiu ngn ng Ruby l g v nhng iu c bn v n. Hiu c th no l mhnh MVC v Framework l g. V em trnh by v framework Rails v nhng th xungquanh n n.

    Nhng vn tip theo ca RoR s gii thiu trong phin bn sau.

    Ph Lc

    Nhng t ng vit tt:

    RoR: Ruby on Rails

    Csdl: c s d liu

    Db: database

    Ti liu tham kho

    [1] http://dev.vast.vn/tuananh/Web/C%C4%90048-1

    [2] Nguyn Hi Chu, Tng quan v Framework Rails

    [3] Michael Harlt,Ruby on Rails Tutorial Learn Web Development With Rails

    http://ruby.railstutorial.org/ruby-on-rails-tutorial-book