Link_to轨道上的另一个视图ruby

时间:2012-11-23 07:45:55

标签: ruby-on-rails link-to

我正在尝试使用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中缺少什么想法?

2 个答案:

答案 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