0

link_to機能を使用して、あるビューを別のビューにリンクしようとしています。

link_toと呼んでいるビューはapp/views / instructors / show.html.erbであり、そのコードスニペットは次のようになります(つまり、最後から2番目の行)

<% 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に欠けているアイデアはありますか?

4

2 に答える 2

0

これは、それ@coursesがゼロであることを意味します。コントローラーのアクションに設定しましたshow_allか?例えば

def show_all
  @courses = Course.all
end

また、showビューでは、オブジェクトcoursesのコレクションに設定しましたCourseが、[コースの削除]リンクは、1つのコースのみを削除したいように見えます。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 に答える