Webbramverk, 1DV450
Linnéuniversitetet, vt 2016
Ruby on Rails I
Denna presentation är licensierat under en
Creative Commons Erkännande 3.0 Unported Licens. (Där inte annat anges)
Foto cc by: http://www.flickr.com/photos/fourthfloor/
Active record ett design-pattern som kan implementeras av olika språk/ramverk (Martin Fowler, 2003)
Object-relational mapping (ORM)
Associations - Kopplingar mellan modeller
Validering
ActiveRecord Query - Databasfrågor på ett objektorienterat sätt
Convention over configuration
Resurs: http://guides.rubyonrails.org/active_record_basics.html
Klassnamn: Order
Filnamn: /app/models/order.rb
Tabellnamn: orders
Primärnyckel: id
Främmande nyckel: customer_id
Kopplingstabell: items_orders
Foto by cc: StockMonkeys.com
Foto cc by: http://www.flickr.com/photos/johnroyer/
Scriptfil som skapar/ändrar databasen
Datamodellen kan ändras under resans gång
Migreringsfiler döps med timestamp, varje förändring bör ha en egen fil
Active Record är gjort för relationsdatabaser
"Ett lag har flera spelare"
Team.find(1).players # Ge mig första lagets alla spelareEn relation defineras i båda modellklasserna
"Classroom has_one Smartboard"
"SmartBoard belongs_to Classroom"
Främmande nyckel hamnar i Smartboard - tabellen, Classroom äger relationen (kan vändas - designfråga)
# Modellklassen för Classroom (eg. app/modells/classroom.rb) class Classroom < ActiveRecord::Base has_one :smartboard # singular (det läses ju så!) end
# Modellklassen för Smartboard class Smartboard < ActiveRecord::Base belongs_to :classroom end
# Vi har nu en metod "smartboard" i vårt Classroom-objekt (starta om rails console) Classroom.find(1).smartboard = Smartboard.new
"Teacher has_many Courses"
"Course belongs_to Teacher"
Främmande nyckel hamnar i Courses
# Modellklassen för Teacher class Teacher < ActiveRecord::Base has_many :courses # plural end
# Modellklassen för Course class Course < ActiveRecord::Base belongs_to :teacher #singular end
# Vi kan plocka ut en array med courses som en teacher har t = Teacher.find_by_id(1) # Assocciationen ger oss metoden courses (plural, array med course-objekt) # returnerar en collectionproxy t.courses # Teacher får en ny course (append operator) t.courses << Course.new # Ta bort en Course (objectet course) t.courses.delete(course) t.courses.size t.courses.empty?
Foto cc by: http://www.flickr.com/photos/johnroyer/
"Student has_and_belongs_to_many courses"
"Course has_and_belongs_to_many students"
Vi behöver två främmande nycklar d.v.s. en extra kopplingstabell
courses_students, alfabetisk ordning på namnet
Skapa en migration som skapar kopplingstabellen (med de två nycklarna)
create_join_table :courses, :students
# Modellklassen för Student class Student < ActiveRecord::Base has_and_belongs_to_many :courses end
# Modellklassen för Course class Course < ActiveRecord::Base has_and_belongs_to_many :students end
# Samma som tidigare exempel men dubbelriktat s = Student.new c = Course.new c.students << s s.courses # returnerar en array med de kurser studenter har (objectet c)http://guides.rubyonrails.org/association_basics.html
Generera upp en egen model som blir en rikare kopplingstabellen med mer information än bara nycklar