290 likes | 306 Views
Learn about the MVC architectural pattern and how to use ActiveRecord for database operations in Ruby on Rails.
E N D
MVC & ActiveRecord by Christian Mohr & Mohamed Souiai
Content • MVC • ActionController • ActionView • ActiveRecord • Routing
Model View Controller • Architectural pattern for interactive Applications. • Isolates business logic from user interface consideration. • Grants flexibility modularity reusability of Objects.
Model • In general the model represents the information (the data) of the application and the business rules used to manipulate the data. • Inside Ruby on Rails the ActiveRecord Module corresponds to the model in the MVC paradigm.
View • In general the view corresponds to elements of the user interface such as text, checkbox items. • In Rails the ActionView is used to create Templates and visualizes the data provided by the controller, in different formats.
Controller • In general the controller manages details involving the communication to the model of user actions such as keystrokes and mouse movements. • In Rails the Controller is realized by the ActionController who coordinates the interaction between user and Application.
Control center ActionController Tasks: • Receiving Http-Request data (i.e. Form data) • Database requests via model-classes. • Setting and query of cookies and sessions. • Setting flash messages. • Calling templates. • Forwarding Files and data. • Authentication .
Control center ActionController UML Diagram: Our Controller class inherits from the ApplicationController. Class AirportsController < ApplicationController
Control center ActionController Controller generator: Syntax: ruby script/generate controller name [action_1 … action_N] Generates the controller app/controllers/name_controller.rb with optional actions and ActionViews: app/views/name/action_n.html.erb. The Actions can be added manually. In that case, the corresponding views are not generated automatically. 1,2
Control center ActionController Controller Actions: • The public Methods of the Controller • Access via URL call: http://<host>:<port>/<controller>/<action> 3,4,5
ActionView • Template-File containing Ruby- and HTML-Code. • By Convention, the name is the same as the corresponding action. • All View-Files have the extension .html.erb
ActionView Syntax in ActionView Files Ruby Code: <% … code … %> Ruby Output: <%=output%> By using html_escape(…) or h(…) Tag-specific characters (i.e. <, > and &) are masked.
ActionView Instance variables: Variables with a leading ‘@’ are accessible to all methods inside the defining controller and the corresponding views .
ActiveRecord … treating Data from a Database like Objects • Domain Specific Language (DSL) “ActiveReord” Design pattern by Martin Fowler: Mapping object-oriented Data to relational Data and vice versa.
ActiveRecord Models: Classes, that represent a data- table and are responsible for the database operations (CRUD) Each row in the database represents a model-object
ActiveRecord Model-Generator Syntax: ruby script/generate model modelname Generates the ActiveRecord model file app/models/modelname.rb To create a new Row in the data table, we create a new Object of the class modelname. By Convention, the data table name is lower case and plural and the model class name is in singular with upper case initial. 6
ActiveRecord CRUD (Create, Read, Update Delete) The four basic database operations: • Create create a new dataset • Read read a dataset • Update alter an existing dataset • Delete delete a dataset
ActiveRecord ActiveRecord-Classes provide methods for the following basic database operations: • new creates a new ActiveRecord-Object • Create(…) creates and saves a new AR-Object • Find(ID) finds the correspoding dataset • Find(:all, :conditions=>…) It is possible to add custom methods. 7,8
ActiveRecord ActiveRecord-Objects offer the following methods: • save saving an object to the database • update alter all or single object attributes • destroy delete an object
ActiveRecord Interesting Functions: • Validation • Before- and After-Filter • Associations and Relations • Migrations • Transactions • Automatic attributes (created_at, updated_at)
ActiveRecord Supported relational management database systems • Oracle • PostgreSQL • SQLite • Sybas • DB2 • Firebird • Frontbase • MySQL • Openbase
Routing • Defines which internal controller and action should be called depending on the URL. • Routing rules are stored in config/routes.rb • Auto generated entries: ActionController::Routing::Routes.draw do |map| # ... map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' end • Restart the server after changing the Routing!
Routing Routing Diagram
Routing Links To generate a Link to http://localhost:3000/bookmarks/show/1 The code in the View would look like this: <%= link_to "show bookmarks", :controller => 'bookmarks', :action => "show", :id => 1 %> There are ways to simplify this!
Routing Simplified URL’s using map.connect • Given Routing: http://localhost:3000/authentication/login • Desired URL: http://localhost:3000/login Add routing-entry above standard entries: map.connect 'login', :controller => "authentication”, :action => "login"
Routing Named Routes using map.name Add routing-entry above standard entries: map.login 'login', :controller => "authentication", :action => "login" Provides login_url and login_path • name_url contains absolute path incl. host • name_path contains relative path without host.
Routing root route using map.root • An applications default index page URL: http://localhost:3000/applicationname • If no controller provided (i.e. http://localhost:3000) the default rails welcome-page is displayed • changing config/routes.rb entry to map.root :controller => "bookmarks” makes bookmarks the root controller • Make sure to delete homonymous files in pubic/
Routing Also possible: • Complex routing with regular expressions • Routing with defined HTTP-Method (GET, POST, PUT, DELETE)
The end Thank you for listening.