Lecture Notes for CS 142
Fall 2010
John Ousterhout
SELECT * FROM students; +----+-----------+------------+------+------+ | id | name | birth | gpa | grad | +----+-----------+------------+------+------+ | 1 | Anderson | 1987-10-22 | 3.9 | 2009 | | 2 | Jones | 1990-04-16 | 2.4 | 2012 | | 3 | Hernandez | 1989-08-12 | 3.1 | 2011 | | 4 | Chen | 1990-02-04 | 3.2 | 2011 | +----+-----------+------------+------+------+
app/models/student.rb):
class Student < ActiveRecord::Base end
script/generate program:
ruby script/generate model student
student = Student.new student.name = "Williams" student.birth = "1989-11-16" student.gpa = 2.8 student.grad = 2012 student.save()
student = Student.find(187)
student = Student.find_by_name("Hernandez")
smarties = Student.find(:all, :conditions => "gpa >= 3.0");
smarties = Student.find(:all, :limit => 10, :order => "gpa DESC");
student = Student.find(187) student.gpa = 4.0 student.save()
Student.find(187).destroy()
Student
students
student for instances of
Student class
Student objects
Student class to students
database table.
SELECT * FROM students; +----+-----------+------------+------+------+------------+ | id | name | birth | gpa | grad | advisor_id | +----+-----------+------------+------+------+------------+ | 1 | Anderson | 1987-10-22 | 3.9 | 2009 | 2 | | 2 | Jones | 1990-04-16 | 2.4 | 2012 | 1 | | 3 | Hernandez | 1989-08-12 | 3.1 | 2011 | 1 | | 4 | Chen | 1990-02-04 | 3.2 | 2011 | 1 | +----+-----------+------------+------+------+------------+ SELECT * FROM advisors; +----+----------+-----------+ | id | name | title | +----+----------+-----------+ | 1 | Fujimura | assocprof | | 2 | Bolosky | prof | +----+----------+-----------+
class Student < ActiveRecord::Base
belongs_to :advisor
end
class Advisor < ActiveRecord::Base
has_many :students
end
advisor = Advisor.find_by_name("Fujimura")
for student in advisor.students() do
...
end
student = Student.find_by_name("Chen")
student.advisor = Advisor.find_by_name("Bolosky")
student.save
SELECT * FROM courses; +----+--------+-----------------+-------------+ | id | number | name | quarter | +----+--------+-----------------+-------------+ | 1 | CS142 | Web stuff | Winter 2009 | | 2 | ART101 | Finger painting | Fall 2008 | | 3 | ART101 | Finger painting | Winter 2009 | | 4 | PE204 | Mud wrestling | Winter 2009 | +----+--------+-----------------+-------------+ SELECT * FROM courses_students; +-----------+------------+ | course_id | student_id | +-----------+------------+ | 1 | 1 | | 3 | 1 | | 4 | 1 | | 1 | 2 | | 2 | 2 | | 1 | 3 | | 2 | 4 | | 4 | 4 | +-----------+------------+
class Student < ActiveRecord::Base
has_and_belongs_to_many :courses
...
end
class Course < ActiveRecord::Base
has_and_belongs_to_many :students
...
end
student = Student.find_by_name("Anderson")
courses = student.courses()
cs142 = Course.find_by_number("CS142")
courses << cs142
class CreateStudents < ActiveRecord::Migration
def self.up
create_table :students do |t|
t.column :name, :string
t.column :birth, :date
t.column :gpa, :float
t.column :grad, :integer
end
end
def self.down
drop_table :students
end
end
class AddAdvisor < ActiveRecord::Migration
def self.up
add_column :students, :advisor_id, :integer
end
def self.down
remove_column :students, :advisor_id
end
end
ruby script/generate migration create_advisors
rake db:migrate
rake db:migrate VERSION=20090130180755
rake db:migrate VERSION=0
rake db:migrate reset