แก้ใน routes.rb
เพิ่มจาก
map.resources :courses
เป็น
map.resources :courses do |courses| courses.resources :lectures end
ทำให้เราสามารถเรียกได้จาก
http://127.0.0.1:3005/courses/1/lectures
ใช้ params[:course_id] ได้เลย
def index
@course = Course.find(params[:course_id])
@lectures = Lecture.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @lectures }
end
end
def show
@course = Course.find(params[:course_id])
@lecture = @course.lectures.find(params[:id]) # เปลี่ยนจาก Lecture.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @lecture }
format.json { render :json => @lecture }
end
end
# GET /lectures/new
# GET /lectures/new.xml
def new
@course = Course.find(params[:course_id])
@lecture = Lecture.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @lecture }
format.json { render :json => @lecture }
end
end
# GET /lectures/1/edit
def edit
@course = Course.find(params[:course_id])
@lecture = @course.lectures.find(params[:id]) # เปลี่ยนจาก Lecture.find(params[:id])
end
def create
@course = Course.find( params[:course_id])
@lecture = Lecture.new(params[:lecture])
@lecture.course_id = @course.id
respond_to do |format|
if @lecture.save
flash[:notice] = ‘Lecture was successfully created.’
format.html { redirect_to([@course, @lecture]) } # @lecture
format.xml { render :xml => @lecture, :status => :created, :location => @lecture }
format.json { render :json => @lecture, :status => :created, :location => @lecture }
else
format.html { render :action => “new” }
format.xml { render :xml => @lecture.errors, :status => :unprocessable_entity }
format.json { render :json => @lecture.errors, :status => :unprocessable_entity }
end
end
end
def update
@course = Course.find(params[:course_id])
@lecture = @course.lecture.find(params[:id]) # เปลี่ยนจาก @lecture = Lecture.find(params[:id])
@lecture.course_id = @course.id
respond_to do |format|
if @lecture.update_attributes(params[:lecture])
flash[:notice] = ‘Lecture was successfully updated.’
format.html { redirect_to([@course, @lecture]) } # @lecture
format.xml { head :ok }
format.json { head :ok }
else
format.html { render :action => “edit” }
format.xml { render :xml => @lecture.errors, :status => :unprocessable_entity }
format.json { render :json => @lecture.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@course = Course.find(params[:course_id])
@lecture = Lecture.find(params[:id])
@lecture.destroy
respond_to do |format|
format.html { redirect_to(course_lectures_url(@course)) } แก้จาก # lectures_url
format.xml { head :ok }
end
end
————————————————————————————-
view/index.html
<h1>Listing lectures for <%= @course.name + “, ” + @course.semester + “, ” + @course.year.to_s %></h1>
<table>
<tr>
<th>Lecture number</th>
<th>Date</th>
<th>Topics</th>
<th>Readings</th>
# ลบ <th>Course</th> ทิ้งไป
</tr>
<% for lecture in @lectures %>
<tr>
<td><%=h lecture.lecture_number %></td>
<td><%=h lecture.date %></td>
<td><%=h lecture.topics %></td>
<td><%=h lecture.readings %></td>
# ลบ <td><%=h lecture.course_id %></td>
<td><%= link_to ‘Show’, [@course, lecture] %></td> # แก้จาก lecture
<td><%= link_to ‘Edit’, edit_course_lecture_path(@course, lecture) %></td> # แก้จาก edit_lecture_path(lecture)
<td><%= link_to ‘Destroy’, [@course, lecture], :confirm => ‘Are you sure?’, :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to ‘New lecture’, new_course_lecture_path(@course) %> # แก้จาก new_lecture_path
————————————————————————————-
มี blanket อยู่สองอันคือ
redirect_to([@course, @lecture]) <% form_for([@course, @lecture]) do |f| %>
มีที่ต้องระวังคือ
course_lectures_url(@course)
def destroy format.html { redirect_to(course_lectures_url(@course)) }