|
|
Nicht so Offensichtliche Dinge
|
|
|
=================================
|
|
|
# Nicht so Offensichtliche Dinge
|
|
|
|
|
|
Die Records für Group, Task und InputOutputTask liegen alle in der Tabelle groups. Das nennt sich in Rails Single Table Inheritance und macht es super einfach Aufgaben und Gruppen in einen Baum zu sortieren.
|
|
|
Hier gibt es eine kleine Übersicht über die Eigenheiten in Ruby und Dozentron als Versuch einen Großteil der Magie zu erklären, die Hinter den Kulissen abläuft.
|
|
|
|
|
|
CanCanCan kann wenn ein Controller load_and_authorize_resource Aufruft automatisch eine Variable mit dem namen `@<controller_name>` erstellen und mit einem Wert belegen, da kommen die magischen Werte her, die jeder Controller nutzt.
|
|
|
|
|
|
Beschreibungen werden mithilfe von einer selbst geschriebenen Klasse AcceptCarrierwaveStringFiles und Carrierwave in Dateien gespeichert anstatt sie in die Datenbank zu speichern. |
|
|
\ No newline at end of file |
|
|
|
|
|
## Rails
|
|
|
|
|
|
Rails ist ein Server-Framework basierend auf Ruby. In diesem [Tutorial](https://www.sitepoint.com/rails-for-beginners/) wird erklärt, wie die verschiedenen Environments einer Rails Anwendung zusammenarbeiten und wie der allgemeine Ablauf beim Entwickeln einer solchen Anwendung aussieht.
|
|
|
|
|
|
|
|
|
|
|
|
## Active Model / Active Records
|
|
|
|
|
|
Das [Active Model](https://www.sitepoint.com/rails-for-beginners/) bietet in Ruby die Möglichkeit, Daten sehr elegant zu modellieren. Mit relativ wenig Code können dabei ganze Datenmodelle samt Validierung entstehen, was von außen jedoch nur schwer nachvollziehbar ist.
|
|
|
|
|
|
Zusätzlich gibt es [Active Record](https://guides.rubyonrails.org/active_record_basics.html), wodurch es möglich ist, Ruby-Klassen an eine Datenbank anzubinden und so die komplette Datenbankverwaltung auf die Objektebene zu verlagern.
|
|
|
|
|
|
Diese beiden Tutorials sollten dabei helfen zu erklären, wo die meisten Werte und Variablen in Ruby-Objekten herkommen.
|
|
|
|
|
|
|
|
|
|
|
|
## Tabellenstruktur
|
|
|
|
|
|
Obwohl es in Dozentron _Gruppen_, normale _Tasks_ und _InputOutputTasks_ gibt, werden diese alle in einer Tabelle `groups` verwaltet.
|
|
|
|
|
|
Diese Art der Vererbungshierarchie auf Datenbankebene wird explizit von Rails unter dem Namen [Single Table Inheritance](<https://medium.com/@dcordz/single-table-inheritance-using-rails-5-02-6738bdd5101a>) unterstützt.
|
|
|
|
|
|
|
|
|
|
|
|
## CanCanCan
|
|
|
|
|
|
Wenn Ressourcen mit `load_and_authorize_resource` angefordert werden, erstellt [CanCanCan](<https://git.thm.de/dalt40/dozentron/wikis/dev-guide/gem-tasks#login-und-user-management>) automatisch eine Variable `@<controller_name>` für den entsprechenden Controller.
|
|
|
|
|
|
Diese Variable wird automatisch mit dem richtigen Wert belegt und kann dann anschließend von den Controllern benutzt werden.
|
|
|
|
|
|
|
|
|
|
|
|
## Speichern von Beschreibungen
|
|
|
|
|
|
Im Gegensatz zu anderen Daten, werden die Beschreibungen bei Dozentron nicht in der Datenbank gespeichert.
|
|
|
|
|
|
Hierfür wird die Klasse [AcceptCarrierwaveStringFiles](<https://git.thm.de/dalt40/dozentron/blob/development/app/models/concerns/accept_carrierwave_string_files.rb>) verwendet, welche das Speichern von Beschreibungen mittels Carrierwave in einer Datei vornimmt. |
|
|
\ No newline at end of file |