0

我正在尝试使用 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。当我尝试上面的代码时,我收到以下错误:

nil:NilClass 的未定义方法“每个”

在这一行:

<% @courses.each do |course| %>

我的link_to中缺少什么想法?

4

2 回答 2

0

这意味着它@courses为零。您是否在show_all控制器的操作中设置了它?例如

def show_all
  @courses = Course.all
end

此外,在您show看来,您设置courses为一组Course对象,但您的“删除课程”链接看起来您只想删除一门课程。为什么你使用delete_course路由链接到你的 show_all 视图?

于 2012-11-23T07:51:07.047 回答
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
于 2012-11-23T07:53:26.000 回答