我正在尝试使用link_to功能将一个视图链接到另一个视图。
我称之为link_to的视图是app / views / instructors / show.html.erb,该代码片段看起来像这样(即,它的倒数第二行)
<% provide(:title, @instructor.login) %>
<% courses = Course.where(:instructor_ID => @instructor.id) %>
<div class="span2">
<h1 align=center ><%= @instructor.login %></h1>
<%= link_to "Add course", new_course_path(:instructor_ID\
=> @instructor.id), :class => "btn" %>
<br>
<br>
<%= link_to "Remove course", delete_course_path(courses), :class => "btn"%>
</div>
我想要链接到的视图是app / views / courses / show_all.html.erb,看起来像这样:
<% @courses.each do |course| %>
<tr>
<td><%= course.course_name %></td>
<td><%= course.instructor_ID %></td>
<td><%= link_to 'Show', course %></td>
<td><%= link_to 'Edit', edit_course_path(course) %></td>
<td><%= link_to 'Destroy', course, :method => :delete, :data => { :confirm => 'Are you sure?' } %></td>
</tr>
delete_course_path路由到上面显示的app / views / courses / show_all.html.erb。当我尝试上面的代码时,我收到以下错误:
未定义的方法`each'代表nil:NilClass
在这一行:
<% @courses.each do |course| %>
我在link_to中缺少什么想法?
答案 0 :(得分:0)
这意味着@courses
为零。您是否在控制器的show_all
操作中进行了设置? E.g。
def show_all
@courses = Course.all
end
此外,在show
视图中,您将courses
设置为Course
个对象的集合,但您的“删除课程”链接看起来只是要删除一个课程。为什么使用delete_course
路由链接到show_all视图?
答案 1 :(得分:0)
在show_all
操作中,您应该定义@courses
个实例变量。这是
<% courses = Course.where(:instructor_ID => @instructor.id) %>
未传递给show_all.html.erb
。
实例变量是从控制器的动作传递到对应的视图的变量。
我想当你显示讲师页面时,你的路线会是这样的:/instructors/:id
,所以也许在你的show_all动作中,教师控制器,你需要这样的东西:
def show_all
@courses = Course.where(instructor_ID: params[:id])
render 'courses/show_all'
end