1

重複の可能性:
NoMethodError (nil:NilClass の未定義メソッド `[]')

私は Rails 3 が初めてで、何かを HTML フォームにレンダリングしようとしています:

<td class="kanban-task-handler">by: <%=h (!@tasks[activity['taskid']]['assignee'].nil? ? @tasks[activity['taskid']]['assignee'] : '') %></td>

しかし、私はこのエラーが発生しています:

undefined method `[]' for nil:NilClass):

しかし、私はこの変数をチェックして、それがnilであるかどうかを述べています->何も出力しません...では、なぜこれが機能しないのですか?

4

4 に答える 4

2

ここで何をしようとしているのかはかなり気になりますが、ここでは @tasks が nil のようです。@tasks.nilで確認できますか?

しかし、@tasks が配列の場合、nil にはならないことを覚えておいてください。Array-> true 代わりに < >.empty?を使用する必要があります。

これを確認するより安全な方法は

@task.try(:attribute).try(:attribute2) etc

HTH

于 2012-12-23T18:01:46.917 に答える
1

たぶん、別の方法でモデル化する必要があります。

@tasks[activity['taskid']]['assignee']そもそもなんでするの???

activity.assigneeまたは「activity.task.assignee」のようなことができるはずです

アクティビティ、タスク、および担当者モデルがあると思います。OK、担当者がいない可能性があります。

しかし、最初の 2 つを使用すると、次のようなことができます。デメテルの法則に従って、複数のクラスのメソッドを呼び出すべきではありません。

class Task < ActiveRecord::Base
  has_many :activities

  def assignee_name
    try(:assignee) || 'No assignee' # or ''
  end
end

class Activity < ActiveRecord::Base
  belongs_to :task

  delegate :assignee_name, to: :task
end

今、あなたはこれをすることができます

<td class="kanban-task-handler">by: <%=h ativity.assignee_name %></td>
于 2012-12-23T18:16:33.160 に答える
0

私は試してみてください:

td class="kanban-task-handler">by: <%=h (!@tasks[activity['taskid']]['assignee']) or ""%></td>

于 2012-12-23T18:09:45.043 に答える
0

rescue同じ行でキーワードを使用して例外を処理することもできます。これを試してください

<td class="kanban-task-handler">by: <%=h (@tasks[activity['taskid']]['assignee'] rescue '') %></td>
于 2012-12-23T18:21:55.023 に答える