1. Daniel Dengler
web developer
Ruby on Rails
Workshop SS 2009
„Ruby on Rails“ and the Rails-Logo are registered trademarks of David Heinemeier Hansson – www.rubyonrails.org
6. 1:1 Beziehungen
1 1
User Profile
users profiles
id integer id integer
name string user_id integer
... ... date_of_birth date
... ...
7. 1:1 Beziehungen
1 1
User Profile
users profiles
id integer id integer
name string user_id integer
... ... date_of_birth date
... ...
8. 1:1 Beziehungen
1 1
User Profile
class User < ActiveRecord:Base class Profile < ActiveRecord:Base
has_one :profile belongs_to :user
end end
9. 1:1 Beziehungen
1 1
User Profile
class User < ActiveRecord:Base class Profile < ActiveRecord:Base
has_one :profile belongs_to :user
end end
Zugriff erfolgt über:
user_instanz.profile => liefert das zugeordnete Profil
profile_instanz.user => liefert den zugeordneten Benutzer
10. 1:1 Beziehungen
1 1
User Profile
Es kann sinnvoll sein diesen Beziehungstyp in einer
Tabelle zu vereinigen
11. 1:1 Beziehungen
User
users
id integer
name string
date_of_birth date
... ...
13. 1:N Beziehungen
1 N
Project Task
projects tasks
id integer id integer
title string project_id integer
... ... title string
... ...
14. 1:N Beziehungen
1 N
Project Task
projects tasks
id integer id integer
title string project_id integer
... ... title string
... ...
15. 1:N Beziehungen
1 N
Project Task
class Project < ActiveRecord:Base class Task < ActiveRecord:Base
has_many :tasks belongs_to :project
end end
16. 1:N Beziehungen
1 N
Project Task
class Project < ActiveRecord:Base class Task < ActiveRecord:Base
has_many :tasks belongs_to :project
end end
Zugriff erfolgt über:
project_instanz.tasks => liefert die zugeordneten Aufgaben als
Array
task_instanz.project => liefert das zugeordnete Projekt
17. N:M Beziehungen
N M
User Group
users group_users groups
id integer group_id integer id integer
name string user_id integer title string
... ... ... ...
18. N:M Beziehungen
N M
User Group
users group_users groups
id integer group_id integer id integer
name string user_id integer title string
... ... ... ...
19. N:M Beziehungen
N M
User Group
class User < ActiveRecord:Base class Group < ActiveRecord:Base
has_and_belongs_to_many :groups has_and_belongs_to_many :users
end end
20. N:M Beziehungen
N M
User Group
class User < ActiveRecord:Base class Group < ActiveRecord:Base
has_and_belongs_to_many :groups has_and_belongs_to_many :users
end end
Zugriff erfolgt über:
user_instanz.groups => liefert die zugeordneten Gruppen
group_instanz.users => liefert die zugeordneten Benutzer
22. Vererbung
User users
id integer
name string
type string
... ...
Manager
Vererbungsmethode: Single Table Inheritance
23. Vererbung
User users
id integer
name string
type string
... ...
Manager
Vererbungsmethode: Single Table Inheritance
24. Vererbung
User
class User < ActiveRecord:Base
end
class Manager < User
end
Manager
25. Lebenszyklus von ActiveRecord
Objekten
Realisiert durch Callbackmethoden, die beim
Aufruf von .save oder .destroy durchlaufen
werden.
Durch implementieren der Methoden in den
eigenen Modellen kann Funktionalität an
der gewünschten Position eingefügt werden.
27. model.destroy()
before_destroy
LÖSCHUNG
after_destroy
Verwendung:
class Profile < ActiveRecord:Base
def after_destroy
# Bild im Dateisystem löschen
end
end
32. Projektbeschreibung
• Einfache Beschreibung des Projektes erstellen
• Ziel der Applikation
• Zielgruppe
• Benutzer / Rollen
• Aktivitäten
• etc.
33. Beispiel: PMS
Ziel:
• Einfache Anwendung zur Verwaltung von
Projekten, Aufgaben und Projektmitarbeitern
• Auf die wesentlichsten Features reduzieren
34. Beispiel: PMS
Zielgruppe:
• kleine, unabhängige Projektteams
• wenig IT Erfahrung
• kurze, einfache Projekte
35. Beispiel: PMS
Benutzer / Rollen:
• Projektverwalter (Admin)
• Mitglieder
• keine Gäste -> Login nötig
36. Beispiel: PMS
Aktivitäten:
• Projekte verwalten (Admin)
• Benutzer verwalten (Admin)
• Benutzer Projekten zuweisen (Admin)
• Aufgaben verwalten (Alle)
38. Features
• Aus der Projektbeschreibung ergeben sich
verschiedene Features
• Features in kleinen Einheiten festhalten
• Möglicherweise hierarchisch Gliedern
• Features priorisieren
(Auf Abhängigkeiten, Machbarkeit und
Aufwand achten!)
• In abgeschlossene Abschnitte
zusammenfassen
39. ❑
Projekte
•
❑
anlegen
•
❑
einsehen
•
❑
bearbeiten
•
❑
löschen
❑
Attribute
•
❑
Titel
•
❑
Beschreibung
•
❑
Fortschritt
•
❑
Zeitstempel
•
❑
Aufgaben -> Aufgabe
❑
Aufgaben
•
❑
anlegen
•
❑
einsehen
•
❑
bearbeiten
•
❑
löschen
❑
Attribute
•
❑
Titel
•
❑
Details
•
❑
Status
•
❑
Zeitstempel
•
❑
Projekt -> Projekt
•
❑
Bearbeiter -> Benutzer
❑
Benutzer
•
❑
anlegen
•
❑
einsehen
•
❑
bearbeiten
•
❑
löschen
•
❑
Berechtigungen
❑
Attribute
•
❑
Vorname
•
❑
Nachname
•
❑
E-Mail
•
❑
Kennwort
•
❑
Zeitstempel
•
❑
Admin
•
❑
Projekte -> Projekt
•
❑
Aufgaben -> Aufgabe
❑
Persönliche Startseite
•
❑
zugewiesene Aufgaben
•
❑
offene Aufgaben in Projekte an denen Benutzer betiligt ist
❑
Suchfunktion
•
❑
Volltextsuche
❑
Filterfuktionen
•
❑
Projekt
•
❑
Aufgaben Status
❑
E-Mail Benachrichtigungen
•
❑
Benutzer wurde Projekt zugewiesen
•
❑
Benutzer wurde aus Projekt entfernt
•
❑
Aufgabe wurde erstellt
•
❑
Aufgabe wurde Benutzer zugewiesen
•
❑
zugewiesene Aufgabe wurde geändert
40. ❑
Projekte
sehr hoch
•
❑
anlegen
sehr hoch
•
❑
einsehen
sehr hoch
•
❑
bearbeiten
sehr hoch
•
❑
löschen
sehr hoch
❑
Attribute
sehr hoch
•
❑
Titel
sehr hoch
•
❑
Beschreibung
hoch
•
❑
Fortschritt
niedrig
•
❑
Zeitstempel
sehr hoch
•
❑
Aufgaben -> Aufgabe
hoch
❑
Aufgaben
hoch
•
❑
anlegen
hoch
•
❑
einsehen
hoch
•
❑
bearbeiten
hoch
•
❑
löschen
hoch
❑
Attribute
hoch
•
❑
Titel
hoch
•
❑
Details
mittel
•
❑
Status
hoch
•
❑
Zeitstempel
hoch
•
❑
Projekt -> Projekt
hoch
•
❑
Bearbeiter -> Benutzer
niedrig
❑
Benutzer
mittel
•
❑
anlegen
mittel
•
❑
einsehen
mittel
•
❑
bearbeiten
mittel
•
❑
löschen
mittel
•
❑
Berechtigungen
niedrig
❑
Attribute
mittel
•
❑
Vorname
mittel
•
❑
Nachname
mittel
•
❑
E-Mail
mittel
•
❑
Kennwort
mittel
•
❑
Zeitstempel
mittel
•
❑
Admin
mittel
•
❑
Projekte -> Projekt
niedrig
•
❑
Aufgaben -> Aufgabe
niedrig
❑
Persönliche Startseite
niedrig
•
❑
zugewiesene Aufgaben
niedrig
•
❑
offene Aufgaben in Projekte an denen Benutzer betiligt ist
niedrig
❑
Suchfunktion
•
❑
Volltextsuche
❑
Filterfuktionen
•
❑
Projekt
•
❑
Aufgaben Status
❑
E-Mail Benachrichtigungen
•
❑
Benutzer wurde Projekt zugewiesen
•
❑
Benutzer wurde aus Projekt entfernt
•
❑
Aufgabe wurde erstellt
•
❑
Aufgabe wurde Benutzer zugewiesen
•
❑
zugewiesene Aufgabe wurde geändert
45. Attribute
project task user
title title rstname
description details lastname
progress state email
timestamps timestamps password
admin
timestamps
46. Attribute
project task user
title title rstname
description details lastname
progress state email
timestamps timestamps password
admin
timestamps
progress kann berechnet werden
47. Attribute
project task user
title title rstname
description details lastname
timestamps state email
timestamps password
admin
timestamps
70. ToDo projects users contact You are logged in as Hans Maulwurf | logout
Projects listing Create new project
project one
Title
project two
project three
Description
project four
project five
project six create project
Ruby on Rails Workshop SS 2009
71. ToDo projects users contact You are logged in as Hans Maulwurf | logout
Project with a long long title hide details
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they
project one live in Bookmarksgrove right at the coast of the Semantics, a large language ocean.
A small river named Duden flows by their place and supplies it with the necessary regelialia. It is a paradisematic country, in which
roasted parts of sentences fly into your mouth.
project two
Progress Members add members
project three
50 % Hans Maulwurf Hans Maulwurf
project four Hans Maulwurf Hans Maulwurf
5 / 10 Tasks completed Hans Maulwurf Hans Maulwurf
project five Hans Maulwurf
project six
Tasks
title
description
Assigned to nobody create task
Task one
Task one
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they
live in Bookmarksgrove right at the coast of the Semantics, a large language ocean. A small river named Duden flows by their place
and supplies it with the necessary regelialia. It is a paradisematic country, in which roasted parts of sentences fly into your mouth.
Task one (assigned to Hans Maulwurf)
Task one
72. ToDo projects users contact You are logged in as Hans Maulwurf | logout
Project with a long long title hide details
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they
project one live in Bookmarksgrove right at the coast of the Semantics, a large language ocean.
A small river named Duden flows by their place and supplies it with the necessary regelialia. It is a paradisematic country, in which
roasted parts of sentences fly into your mouth.
project two
Progress Members add members
project three
50 % Hans Maulwurf Hans Maulwurf
project four Hans Maulwurf Hans Maulwurf
5 / 10 Tasks completed Hans Maulwurf Hans Maulwurf
project five Hans Maulwurf
project six
Tasks
title
description
Assigned to nobody create task
Task one
Task one
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they
live in Bookmarksgrove right at the coast of the Semantics, a large language ocean. A small river named Duden flows by their place
and supplies it with the necessary regelialia. It is a paradisematic country, in which roasted parts of sentences fly into your mouth.
Task one (assigned to Hans Maulwurf)
Task one
Task one
Task one
Task one
Task one
Task one
Ruby on Rails Workshop SS 2009