Understanding Rails ActiveRecord: A Comprehensive Overview
The content provides a detailed guide on working with Rails ActiveRecord, focusing on creating, reading, updating, and deleting records in a student table. It covers model creation, data manipulation commands, querying data, and examples of controller and view implementations. The material also touches on establishing many-to-one relationships between entities. Beginners to Rails development can benefit greatly from these explanations and examples.
Uploaded on Sep 30, 2024 | 0 Views
Download Presentation
Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
E N D
Presentation Transcript
Model for Student Table 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 | +----+-----------+------------+------+------+ Rails model class (app/models/student.rb): class Student < ActiveRecord::Base end Command to create this class: rails generate model student CS 142 Lecture Notes: Rails ActiveRecord Slide 1
Create New Record student = Student.new student.name = "Williams" student.birth = "1989-11-16" student.gpa = 2.8 student.grad = 2012 student.save() CS 142 Lecture Notes: Rails ActiveRecord Slide 2
Read, Update, Delete students = Student.all() student = Student.find(187) student = Student.find_by(name: "Hernandez") student = Student.find_by_name("Hernandez") smarties = Student.where("gpa >= 3.0") smarties = Student.order("gpa DESC").limit(10) student = Student.find(187) student.gpa = 4.0 student.save() Student.find(187).destroy() CS 142 Lecture Notes: Rails ActiveRecord Slide 3
Simple Example app/controllers/students_controller.rb: class StudentsController < ApplicationController ... def index @students = Student.all end end CS 142 Lecture Notes: Rails ActiveRecord Slide 4
Simple Example, contd app/views/students/index.html.erb: <%@title = "All Students"%> <h1>Current Students</h1> <table class="oddEven"> <tr class="header"> <td>Name</td> <td>Date of Birth</td> <td>GPA</td> <td>Graduation Year</td> </tr> <% for student in @students %> <tr class="<%= cycle('even', 'odd') %>"> <td><%= link_to(student.name, action: :edit, id: student.id) %></td> <td><%= student.birth %></td> <td><%= student.gpa %></td> <td><%= student.grad %></td> </tr> <% end %> </table> CS 142 Lecture Notes: Rails ActiveRecord Slide 5
Many-to-One Relationships 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 CS 142 Lecture Notes: Rails ActiveRecord Slide 6
Many-To-One Examples 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 Additional methods defined by Rails CS 142 Lecture Notes: Rails ActiveRecord Slide 7
Many-to-Many Relationships 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 | +----+-----------+------------+------+------+ SELECT * FROM courses_students; +-----------+------------+ | course_id | student_id | +-----------+------------+ | 1 | 1 | | 3 | 1 | | 4 | 1 | | 1 | 2 | | 2 | 2 | | 1 | 3 | | 2 | 4 | | 4 | 4 | +-----------+------------+ 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 | +----+--------+-----------------+-------------+ class Student < ActiveRecord::Base has_and_belongs_to_many :courses end class Course < ActiveRecord::Base has_and_belongs_to_many :students end CS 142 Lecture Notes: Rails ActiveRecord Slide 8
Many-To-Many Examples student = Student.find_by_name("Anderson") for course in student.courses do ... end cs142 = Course.find_by_number("CS142") student.courses << cs142 Additional methods defined by Rails CS 142 Lecture Notes: Rails ActiveRecord Slide 9
Migration: Create New Table db/migrate/20090215220309_create_students.rb: class CreateStudents < ActiveRecord::Migration def change create_table :students do |t| t.column :name, :string t.column :birth, :date t.column :gpa, :float t.column :grad, :integer end end end CS 142 Lecture Notes: Rails ActiveRecord Slide 10
Migration: Add Column db/migrate/20101013224357_add_advisor.rb: class AddAdvisor < ActiveRecord::Migration def change add_column :students, :advisor_id, :integer end end CS 142 Lecture Notes: Rails ActiveRecord Slide 11
Migration Utilities rails generate migration create_students => db/migrate/20131212210728_create_students.rb rails generate model students rake db:migrate rake db:migrate VERSION=20090130180755 rake db:reset rake db:migrate:reset CS 142 Lecture Notes: Rails ActiveRecord Slide 12
CS 140 Lecture Notes: File Systems Slide 13