Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Dr Alexiei Dingli Web Science Stream Models, Views and Controllers.

Similar presentations


Presentation on theme: "1 Dr Alexiei Dingli Web Science Stream Models, Views and Controllers."— Presentation transcript:

1 1 Dr Alexiei Dingli Web Science Stream Models, Views and Controllers

2 2 Case Study: digg

3 3 rails shovell Creating our shovell application

4 4 To generate a new data model for our application we’ll use the comand below Our Story model will get two attributes –Name –Link String is a type which holds up to 255 alphanumeric characters cd shovell ruby script/generate model Story name:string link:string Generating our model

5 5 exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/story.rb create test/unit/story_test.rb create test/fixtures/stories.yml create db/migrate create db/migrate/20091019052909_create_stories.rb The output should be...

6 6 story.rb –In the app/model –Creates a blank ActiveRecord story_test.rb –Automatically generated unit testing stories.yml –Helps our unit testing and is called a Fixture –Fixtures are files containing simple data for unit testing purposes 20091019052909_create_stories.rb –A migration file Let’s look at the output

7 7 Lightweight format to represent data Has the.yml extension Have a look at the test/fixtures/stories.yml YAML

8 8 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html one: name: MyString link: MyString two: name: MyString link: MyString stories.yml

9 9 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html one: name: My web site link: http://abc.net two: name: Other web site link: http://www.theotherwebsite.com stories.yml

10 10 Migration files –Used to make modifications to the database schema –All through Ruby code –No SQL needed –Files are numbered so they can be executed sequentially –They are executed in order –Located in the db/migrate dir I’m going to Migrate!

11 11 class CreateStories < ActiveRecord::Migration def self.up create_table :stories do |t| t.string :name t.string :link t.timestamps end def self.down drop_table :stories end 20091019052909_create_stories.rb

12 12 Change –create_table :stories do |t| To –create_table :stories, :force =>true do |t| Useful if we already have some table structures defined in the database Let’s do a small modification

13 13 rake is based upon the C make tool Very versatile and allows us to do a number of things... Try –rake –T In our example we’ll make the migration by invoking –rake db:migrate Let’s make our migrate

14 14 1.Checks the database for the most recent migration 2.Steps through the migrations that have not been applied 3.For each migration execute the up method rake db:migrate

15 15 == CreateStories: migrating ================== -- create_table(:stories) -> 0.0040s == CreateStories: migrated (0.0050s) ========= If it is successful we will find a stories table in our shovell database The output

16 16 rake db:migrate version=n Eg: undo all the tables in the database by invoking: –rake db:migrate version=0 Rolling back

17 17 Open a rails console –ruby script/console Playing with the data

18 18 s = Story.new s.name = “My new website” s.link = “http://abc.net” s.save The end result should be => true Creating our first record

19 19 To see the record id –s.id To check if its a new record –s.new_record? To check the number of Stories in the DB –Story.count Another way of creating records –Story.create( :name => ‘Abc’, :link => ‘http://www.mysite2.com’) More on records...

20 20 Story.find(2) Story.find(:all) Story.find(:all).last Story.find(:first, :order => ‘id DESC’) Retrieving records

21 21 Story.find_by_name(‘Abc’) How would we find the link ‘http://abc.net’? Try it... Dynamic finders...

22 22 s = Story.find_by_name(‘Abc’) s.name = ‘Abcd’ s.save Let’s update

23 23 s = Story.find_by_name(‘Abcd’) s.update_attribute :name. ‘Abcde’ Let’s update and save in just one step

24 24 s.destroy Try to find the record... what’s the message? Bye Bye records

25 25 Have a look at –log/development.log –CREATE TABLE "stories" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "link" varchar(255), "created_at" datetime, "updated_at" datetime What about SQL?

26 26 ruby script/generate controller Stories index Generating our first controller!

27 27 exists app/controllers/ exists app/helpers/ create app/views/stories exists test/functional/ create test/unit/helpers/ create app/controllers/stories_controller.rb create test/functional/stories_controller_test.rb create app/helpers/stories_helper.rb create test/unit/helpers/stories_helper_test.rb create app/views/stories/index.html.erb The output

28 28 First it generates a number of folders (unless they have been created already) StoriesController –Has defined the index method stories_controller_test.rb –Will hold the test functions stories_helper.rb –Class to help the controller Index.html.erb –One of the views which will be our initial template Explaining the output

29 29 Start a server –ruby script/server Goto –http://127.0.0.1:3000/stories Let’s see what we have so far...

30 30 Two ways... With or Without scaffolding! Creating views

31 31 A powerful feature of rails Quickly creates a web interface for interacting with your model Provides an easy way to add, manipulate and delete records Scaffold generates a model, controller, actions and other templates What is scaffolding?

32 32 Designed for quick interaction only Not intended as a fully automateed web site generator It can’t cope with associations (relationships) between objects Limitations of Scaffold

33 33 ruby script/generate scaffold Story name:String link:String Let’s scaffold!

34 34 Start a server –ruby script/server Goto –http://127.0.0.1:3000/stories Let’s see what we have so far...

35 35 Scaffold is essentially a script that we invoke using script/generate The nice thing about script/generate is that there exists a script/destroy using exactly the same arguments So let’s destroy the scaffold –ruby script/destroy scaffold Story name:String link:String Script/generate

36 36 Start a server –ruby script/server Goto –http://127.0.0.1:3000/stories Let’s see what we have so far...

37 37 ruby script/generate model Story name:string link:string ruby script/generate controller Stories index Ohh No!! We lost everything!!

38 38 Start a server –ruby script/server Goto –http://127.0.0.1:3000/stories Let’s see what we have so far...

39 39 app/views/stories –Only index.html.erb so far –Generated as a static page –Let’s add some dynamic information Insert – Views

40 40 Start a server –ruby script/server Goto –http://127.0.0.1:3000/stories Let’s see what we have so far...

41 41 We shouldn’t be including ruby code directly in the view Ideally we keep them separated so... –In the /app/controllers/stories_controller.rb In the def index add –@current_time = Time.now –In the app/views/stories/index.html.erb replace the previous code with – –Try it out! Problems!

42 42 In the controller /app/controllers/stories_controller.rb –In the def index, remove what we just wrote and write @story = Story.find(:first, :order => ‘RANDOM()’) –In the app/views/stories/index.html.erb replace the previous code with –A random link: Let’s do something more useful

43 43 Start a server –ruby script/server Goto –http://127.0.0.1:3000/stories Let’s see what we have so far...

44 44 Why not add some data and try again? ruby script/console Loading development environment (Rails 2.3.2) >> s = Story.new >> s.name = "ABC" >> s.link = "http://aaa.com" >> s.save Didn’t work?

45 45 Questions?


Download ppt "1 Dr Alexiei Dingli Web Science Stream Models, Views and Controllers."

Similar presentations


Ads by Google