| Field | Datatype |
|---|---|
| name | string |
| gender | string |
| phone | string |
| Field | Datatype |
|---|---|
| course_num | string |
| title | string |
| credit_hours | integer |
| Field | Datatype |
|---|---|
| student_id | integer |
| course_id | integer |
http://localhost:3000/students http://localhost:3000/courses
<h3>Courses for <%= @student.name %></h3>
<table>
<tr>
<th>Course Number</th>
<th>Course Title</th>
<th>Credit Hours</th>
</tr>
<% @student.enrollments.each do |e| %>
<tr>
<td><%= e.course.course_num %></td>
<td><%= e.course.title %></td>
<td><%= e.course.credit_hours %></td>
</tr>
<% end %>
</table>
<h3>Students in <%= @course.course_num %></h3>
<table>
<tr>
<th>Name</th>
<th>Gender</th>
<th>Phone Number</th>
</tr>
<% @course.enrollments.each do |e| %>
<tr>
<td><%= e.student.name %></td>
<td><%= e.student.gender %></td>
<td><%= e.student.phone %></td>
</tr>
<% end %>
</table>
<td><%= course.enrollments.count %></td>
We now add the capability of enrolling students in new courses.
def get_courses
courses = self.enrollments.collect do |e|
e.course
end
return courses
end
# Check if student is enrolled in a course
def enrolled_in?(course)
return get_courses.include?(course)
end
# Get list of all courses that a
# student is not enrolled
def unenrolled_courses
return Course.all - get_courses
end
def add_course
@student = Student.find(params[:id])
@course = Course.find(params[:course])
if not @student.enrolled_in?(@course)
enroll = Enrollment.new
enroll.student_id = @student.id
enroll.course_id = @course.id
enroll.save
end
redirect_to @student
end
Add this form to the bottom of the Student show method
before the Edit and Back links.
<% if @student.courses.count < Course.count %>
<p>Enroll in a course.</p>
<%= form_tag add_course_student_path(@student) do %>
<%= select_tag(:course,
options_from_collection_for_select(
@student.unenrolled_courses, :id, :course_num)) %>
<%= submit_tag 'Enroll' %>
<% end %>
<% end %>
resources :students do
member do
post :add_course
end
end