Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2...
Transcript of Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2...
![Page 1: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/1.jpg)
Datenbankapplikationen mitRuby on Rails, Teil 2
Datenbanksysteme 2011Universität Osnabrück
Gastvorlesung von Nicolas Neubauer
![Page 2: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/2.jpg)
Views & TemplatesRuby on Rails: Anwendung
Controller
Model(s)
DB
View(s)
Request
Anfrage
SQL
Rails-Objekte
Objekte zurAnzeige
Response
http://dbs:3333/lectures/show/2
![Page 3: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/3.jpg)
WiederholungRuby on Rails: Anwendung
Demo
![Page 4: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/4.jpg)
WiederholungRuby on Rails
• Model-View-Controller
• Don‘t Repeat Yourself
• Convention over Configuration
• Objektrelationales Mapping
• Browser-Request Verarbeitung
• Templates
![Page 5: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/5.jpg)
Neue Applikation von 0Ruby on Rails
• Bisher: Vorhandene Datenbank
• Jetzt: Komplett neue Applikation
![Page 6: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/6.jpg)
ScaffoldsRuby on Rails
• Scaffold = Gerüst
• rails generate scaffold lectures
• erzeugt:
• Migration
• Model
• Controller
• Views
• Tests
![Page 7: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/7.jpg)
MigrationRuby on Rails
• Methode für iterative Datenbankentwicklung
class CreateLectures < ActiveRecord::Migration def self.up create_table :lectures do |t| t.string :titel i.integer :vorl_nr end end
def self.down drop_table :lectures endend
![Page 8: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/8.jpg)
MigrationRuby on Rails
• Methode für iterative Datenbankentwicklung
class AddSWSLectures < ActiveRecord::Migration def self.up add_column :lectures, :sws, :integer end
def self.down remove_column :lectures, :sws endend
![Page 9: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/9.jpg)
MigrationRuby on Rails
• übernimmt später CREATE/ALTER TABLE
$ rails generate scaffold lectures titel:string sws:integer vorl_nr:integer professor:references
DATENFELD:DATENTYP
stringtextintegerfloatdatetime...
![Page 10: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/10.jpg)
MigrationRuby on Rails
• übernimmt später CREATE/ALTER TABLE
$ rails generate scaffold lectures titel:string sws:integer vorl_nr:integer professor:references
$ rails generate scaffold lectures titel:string sws:integer vorl_nr:integer professor_id:integer
<=>
![Page 11: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/11.jpg)
MigrationRuby on Rails
• sind eigene Klassen in
• können automatisiert ausgeführt werden
• Datenbank kennt aktuelle Version
meine_applikation/db/migrate
rake db:migrate VERSION=123
![Page 12: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/12.jpg)
ModelRuby on Rails
• automatisch generierte Model-Klassen
• Obacht: Klasse Professor wird nicht angepasst
class Lecture < ActiveRecord::Base belongs_to :professorend
$ rails generate scaffold lectures titel:string sws:integer vor_nr:integer professor:references
![Page 13: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/13.jpg)
Controller & ViewsRuby on Rails
• Controller und Views für CRUD-Operationen
• betrachtet Entität als Ressource
• REST-Operationen
• Bietet HTML- und XML-Zugriffsmöglichkeiten
GETPOSTPUTDELETE
![Page 14: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/14.jpg)
Controller & ViewsRuby on Rails
class LecturesController < ApplicationController def show @lecture = Lecture.find(params[:id])
respond_to do |format| format.html # show.html.erb format.xml { render :xml => @lecture } end end
...
end
![Page 15: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/15.jpg)
Controller & ViewsRuby on Rails
• Erinnerung:
• HTML-Oberflächen für CRUD-Operationen
def show ...end
render :action => „show“
![Page 16: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/16.jpg)
Neue Applikation von 0Ruby on Rails
![Page 17: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/17.jpg)
Neue Applikation von 0Ruby on Rails
Demo
![Page 18: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/18.jpg)
Scaffolds: WiederholungRuby on Rails
• rails generate scaffold lectures
• erzeugt:
• Migration CREATE TABLE ...
• Model Lecture.new
• Controller http://.../lecture/show
• Views show.html.erb
• Tests ...
![Page 19: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/19.jpg)
Fortgeschrittene ORM-TechnikenRuby on Rails
• mehrwertige Relationen und Relationen mitAttributen
Student Vorlesung
ProfessorNote
n m
k
![Page 20: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/20.jpg)
Fortgeschrittene ORM-TechnikenRuby on Rails
Student Vorlesung
ProfessorNote
• mehrwertige Relationen und Relationen mitAttributen
Prüfung
1
n
nn
11
![Page 21: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/21.jpg)
Fortgeschrittene ORM-TechnikenRuby on Rails
• Entitäten mit N:M-Selbstreferenz
Vorlesung
m n
has_and_belongs_to_many :vorgaenger, :class_name => "Lecture", :join_table => "lectures_lectures", :foreign_key => "nachfolger_id", :association_foreign_key => "vorgaenger_id"
![Page 22: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/22.jpg)
Scaffolds: WiederholungRuby on Rails
• rails generate scaffold lectures
• erzeugt:
• Migration CREATE TABLE ...
• Model Lecture.new
• Controller http://.../lecture/show
• Views show.html.erb
• Tests ...
![Page 23: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/23.jpg)
Testen in RailsRuby on Rails
• Test-Driven-Development
• Kernidee von Rails
• integrierte Tests für
• Models (Unit-Tests)
• Controller (Functional Tests)
• Views (Functional Tests)
• Controller-Interaktion (Integration Tests)
![Page 24: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/24.jpg)
Testen in RailsRuby on Rails
TestdatenTests für Controller/ViewsTests für Controller-Interaktion
Tests für Models
• Verzeichnis test
![Page 25: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/25.jpg)
Einfacher Unit-TestRuby on Rails
require 'test_helper'
class StudentTest < ActiveSupport::TestCase # Replace this with your real tests. test "the truth" do assert true endend
• unit/student_test.yml
![Page 26: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/26.jpg)
Einfacher Unit-TestRuby on Rails
require 'test_helper'
class StudentTest < ActiveSupport::TestCase
test "valid semester" do s = Student.new s.name = "Willi" s.matr_nr = 123 s.semester = -1 #fehlerhafte daten assert !s.save, "Neg. Semester erlaubt"
endend
![Page 27: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/27.jpg)
• Test ausführen
• Lädt Testdaten in Datenbank
• Führt alle Tests aus
Einfacher Unit-TestRuby on Rails
$ ruby -Itest test/unit/student_test.rb
für test_helper.rbTest(s)
![Page 28: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/28.jpg)
Einfacher Unit-TestRuby on Rails
Loaded suite test/unit/student_testStartedFFinished in 0.105289 seconds.
1) Failure:test_valid_semester(StudentTest)[test/unit/student_test.rb:11]:Neg. Semester erlaubt
1 tests, 1 assertions, 1 failures,0 errors, 0 skips
• Ergebnis:
![Page 29: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/29.jpg)
Test-Driven-DevelopmentRuby on Rails
• Erst Test schreiben, dann Funktionalität entwickeln
• Beispiel: Validierung von Daten eines Models
• app/models/student.rb
• Obacht: Niemand verhindert INSERT INTO ...
validates :semester, :presence => true, :inclusion => 1..25
![Page 30: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/30.jpg)
Einfacher Unit-TestRuby on Rails
Loaded suite test/unit/student_testStarted.Finished in 0.028667 seconds.
1 tests, 1 assertions, 0 failures,0 errors, 0 skips
• Ergebnis:
![Page 31: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/31.jpg)
FixturesRuby on Rails
• Nicht auf Produktivdaten testen
• Fixtures = Testdaten
• YAML oder CSV
• Test-Datenbank in database.yml konfigurieren
• ggf. mit rake db:test:prepare initialisieren
• vor dem Testen automatisch in dieTestdatenbank geladen
![Page 32: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/32.jpg)
FixturesRuby on Rails
one: matr_nr: 1 name: MyString semester: 1
two: matr_nr: 1 name: MyString semester: 1
• fixtures/students.yml
![Page 33: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/33.jpg)
FixturesRuby on Rails
willi: matr_nr: 123 name: Willi Wacker semester: 5 lectures: infob
• fixtures/students.yml
![Page 34: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/34.jpg)
FixturesRuby on Rails
infoa: titel: Info A vorl_nr: 1 sws: 9
infob: titel: Info B vorl_nr: 2 sws: 9 vorgaenger: infoa
• fixtures/lectures.yml
![Page 35: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/35.jpg)
Unit-Test mit TestdatenRuby on Rails
def fehlende_vl erg = [] self.lectures.each do |l| erg = erg + (l.vorgaenger - self.lectures) end return erg.uniq end
• models/student.rb
![Page 36: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/36.jpg)
Unit-Test mit TestdatenRuby on Rails
require 'test_helper'
class StudentTest < ActiveSupport::TestCase
test "vl_ohne_vorgaenger funktion" do s = students(:willi) assert s.fehlende_vl.include? (lectures(:infoa)), "Willi sollte Info A fehlen" endend
![Page 37: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/37.jpg)
Unit-Test mit TestdatenRuby on Rails
Loaded suite test/unit/student_testStarted..Finished in 0.097540 seconds.
2 tests, 2 assertions, 0 failures,0 errors, 0 skips
• Ergebnis:
![Page 38: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/38.jpg)
Weitere InformationenRuby on Rails
• Mehr zum Thema Testen mit Rails
• Übungsblatt und Übung
• http://guides.rubyonrails.org/testing.html
![Page 39: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/39.jpg)
Ein „echtes“ BeispielRuby on Rails
• Was fehlt eigentlich noch?
• „echte“ Queries
• Datenbank-Performance ausnutzen
• IMDB-Datenbank:O(n * log n) bei 60 Millionen Einträgen...
• ActiveRecord-Query-Interface
![Page 40: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/40.jpg)
ActiveRecordRuby on Rails
• Datenabfragen mit eigenem Query-Interface
• Benötigt passende Model-Klasse
Movie.firstMovie.find(123)Movie.where(:name => „abc“).where(:year => 1942)Movie.where(„name = ?“, @name)Movie.order(„name“)
offset, limit, group, having, ...
![Page 41: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/41.jpg)
ActiveRecordRuby on Rails
• Direkte Anfragen an die Datenbank
• Liefert einen Array mit Hashes oder Hashes
ActiveRecord::Base.connection.
select_all(„SELECT * FROM movies ...“)select_one(„SELECT * FROM movies ...“)...
h = [{:title => „Casablanca“, :id => 1}, {...}]
h[0][:title]
![Page 42: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/42.jpg)
ErinnerungRuby on Rails: Active Record
def fehlende_vl erg = [] self.lectures.each do |l| erg = erg + (l.vorgaenger - self.lectures) end return erg.uniq end
• models/student.rb
![Page 43: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/43.jpg)
ErinnerungRuby on Rails: Active Record
def fehlende_vl Lecture.find_by_sql("SELECT l.* FROM lectures l, lectures_students ls, lectures_lectures ll WHERE ls.lecture_id = ll.nachfolger_id and ls.student_id = " + self.id.to_s + " and ll.vorgaenger_id = l.id and ll.vorgaenger_id not in (SELECT ls2.lecture_id FROM lectures_students ls2 WHERE ls2.student_id = " + self.id.to_s + ")") end
• models/student.rb
![Page 44: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/44.jpg)
ErinnerungRuby on Rails: ActiveRecord
Loaded suite test/unit/student_testStarted..Finished in 0.097540 seconds.
2 tests, 2 assertions, 0 failures,0 errors, 0 skips
• Ergebnis:
![Page 45: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/45.jpg)
ZusammenfassungRuby on Rails
• Datenbankabstraktion mitORM und ActiveRecord
• Applikationsdesign mit Model-View-Controller
• Don‘t Repeat Yourself
• Convention over Configuration
• Scaffolds & Migrations
• Bestehende Datenbanken undneue Applikationen
• Tests
![Page 46: Datenbankapplikationen mit Ruby on Rails, Teil 2dbs/2011/... · Ruby on Rails, Teil 2 Datenbanksysteme 2011 Universität Osnabrück Gastvorlesung von Nicolas Neubauer. Views & Templates](https://reader034.fdocuments.net/reader034/viewer/2022042417/5f3305658fe9cd40487ee9a5/html5/thumbnails/46.jpg)
Literatur und weitere InformationenRuby on Rails
• Agile Web Development with Rails.Thomas, Dave; Heinemeier Hansson, David.(Obacht: Fourth Edition für Rails 3, Rest veraltet!)
• Rails API:http://api.rubyonrails.org/
• Ruby-Dokumentation:http://corelib.rubyonrails.org/
• Rails Guides:http://guides.rubyonrails.org/