2

情報を提供してくれた皆さんに感謝します!非常に迅速な対応がいくつかありました。私の解決策は、ifでより明確なテストを使用することでした。勝利のための文法!

「予期していなかったときにnilオブジェクトがあります!nil.nameの評価中にエラーが発生しました」

このエラーは、以下の「file.name」の行を示しています。

nil.nameと評価されて空である(そうあるべきである)理由はわかりますが、そのコードが実行される理由がわかりません。

iftoのテストを変更することで機能します。

if file[0] != nil

私が見逃している重要な詳細があるように感じますので、これを理解するのに助けていただければ幸いです。

私の見解では:

<table>
  <tr>
    <th>File</th>
    <th>Description</th>
  </tr>

  <% if !@files.empty? %>
    <% @files.each do |file| %>
    <tr>
      <td><%= file.name %></td>
      <td><%= file.description %></td>
      <td><%= link_to "Download", :controller => "files", :action => "download", :id => file.id %></td>
      <td><%= button_to "Delete", { :controller => "files", :action => "destroy", :id => file.id }, :method => "delete" %></td>
    </tr>
    <% end %>

  <% else %>

  <tr>
    <td><b>No files</b></td>
  </tr>

  <% end %>
</table>

コントローラで、@ filesという空の配列を作成し、後で値が作成されたときに値をプッシュします。

Ruby 1.8.7-p72 Rails 2.2.2

4

1 に答える 1

0

@filesインスタンス変数に必要なのは、空の配列のいずれかです

@files = []

または実際のFileオブジェクト

@files = File.all

nilしかし、あなたはどういうわけか、たとえば要素を含む配列を生成しているようです

@files = [nil, <#File>, <#File>]

したがって、@ files自体はnilではありませんが、最初の要素はnilです。したがって、次のコードはtrue

@files.any?

これは

!@files.empty?

@files.is_a? Arraynot @files.nil?。_ 問題は、にnil要素を追加しているように見える対応するコントローラーにある必要があります@files

于 2012-07-08T10:15:18.340 に答える