【问题标题】:Link_to another view ruby on railsLink_to 另一个视图 ruby​​ on rails
【发布时间】:2012-11-23 07:45:54
【问题描述】:

我正在尝试使用 link_to 功能将一个视图链接到另一个视图。

我调用 link_to 的视图是 app/views/instructors/show.html.erb 并且代码的 sn-p 看起来像这样(即倒数第二行)

<% 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 的未定义方法 `each'

在这一行:

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

任何想法我在我的 link_to 中缺少什么?

【问题讨论】:

    标签: ruby-on-rails link-to


    【解决方案1】:

    在您的show_all 操作中,您应该定义一个@courses 实例变量。这是

    &lt;% courses = Course.where(:instructor_ID =&gt; @instructor.id) %&gt;

    未传递给show_all.html.erb

    实例变量是从控制器的动作传递到对应的视图的变量。

    我想当您显示讲师页面时,您的路线会像这样:/instructors/:id,所以也许在您的讲师控制器的 show_all 操作中,您需要类似:

    def show_all
      @courses = Course.where(instructor_ID: params[:id])
      render 'courses/show_all'
    end
    

    【讨论】:

      【解决方案2】:

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

      def show_all
        @courses = Course.all
      end
      

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

      【讨论】:

      • 感谢工作。请原谅我对这个主题缺乏了解,但这是否意味着每个视图都需要一个控制器方法来配合它?
      • 大多数情况下,每个视图都应该有一个控制器方法。不过,通过在控制器操作中使用render 方法,您可以指定要呈现的另一个视图。或者重定向到另一个页面,例如控制器的脚手架删除、更新或创建方法。
      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2013-03-06
      • 1970-01-01
      相关资源
      最近更新 更多