ThuisBalletje
TrainingenBalletje
ConsultancyBalletje
Blog Balletje
Script/console Sessie
07-01-2008

Interactieve shell met een rails app

Onderschat niet hoe waardevol script/console is voor het leren van rails. Ik moet het iedere beginner aanraden. Waarom?

Omdat je zelf nooit zo snel controller en view code kan schrijven om echt lekker met je app bezig te zijn. Je bent dan meer met html bezig dan met rails. En dat is niet de bedoeling. Dus we gaan aan de hand van een script/console sessie laten zien wat er al gelijk mogelijk is met een simpele rails app. We gaan uit van rails 2.0.2 wat sqlite3 als database gebruikt.


Als je exact dezelfde output wil genereren als hieronder dan moet je voor het commando rake db:migrate ook even t.timestamps verwijderen in je migration. Ik heb deze verwijderd om wat compactere output te krijgen.

> rails demo

> cd demo

> script/generate model Gebruiker naam:string

> rake db:migrate

> script/console

Loading development environment (Rails 2.0.2)

>> Gebruiker.count

=> 0

>> Gebruiker.class

=> Class

>> g = Gebruiker.new( :naam => 'Peter' )

=> #Gebruiker id: nil, naam: "Peter"

>> g.naam

=> "Peter"

>> g.new_record?

=> true

>> g.save

=> true

>> g.new_record?

=> false

>> Gebruiker.count

=> 1

>> Gebruiker.column_names

=> ["id", "naam"]

>> Gebruiker.create( :naam => 'Steve' )

=> #Gebruiker id: 2, naam: "Steve"

>> Gebruiker.column_names.class

=> Array

>> Gebruiker.count

=> 2

>> Gebruiker.create( :naam => 'Matz' )

=> #Gebruiker id: 3, naam: "Matz"

>> Gebruiker.new( :naam => 'Leah' ).save

=> true

>> Gebruiker.count

=> 4

>> gebruikers = Gebruiker.find(:all).collect(&:naam).sort

=> ["Leah", "Matz", "Peter", "Steve"]

>> gebruikers.include? 'Leah'

=> true

>> g = Gebruiker.find_by_naam( gebruikers.last )

=> #Gebruiker id: 2, naam: "Steve"

>> g.class

=> Gebruiker(id: integer, naam: string)

>> g.naam.class

=> String

>> nieuw = %w{ Bianca Miranda Chantal }

=> ["Bianca", "Miranda", "Chantal"]

>> nieuw.class

=> Array

>> nieuw.size

=> 3

>> nieuw.each { |g| Gebruiker.create( :naam => g ) }

=> ["Bianca", "Miranda", "Chantal"]

>> Gebruiker.count

=> 7

>> g = Gebruiker.find_by_naam 'Chantal'

=> #Gebruiker id: 7, naam: "Chantal"

>> g.update_attribute :naam, 'Chantal Edit'

=> true

>> g

=> #Gebruiker id: 7, naam: "Chantal Edit"

>> g.naam = 'Chantal'

=> "Chantal"

>> g.save

=> true

>> g.destroy

=> #Gebruiker id: 7, naam: "Chantal"

>> Gebruiker.count

=> 6

>> g = Gebruiker.find_or_create_by_naam 'Chantal'

=> #Gebruiker id: 8, naam: "Chantal"

>> g = Gebruiker.find_or_create_by_naam 'Peter'

=> #Gebruiker id: 1, naam: "Peter"

>> Gebruiker.delete_all

=> 7

>> Gebruiker.count

=> 0

>> THE END

En al deze mogelijkheden na het simpel genereren van het model Gebruiker. Maar het is gewoon ook een prima omgeving om ruby code te testen. Even checken of iets werkt. Hierboven was het voornamelijk ActiveRecord maar van alles is mogelijk.