首页 > 解决方案 > ruby on rails中的NameError

问题描述

所以我正在制作一个应用程序来管理项目及其任务,使用我制作了一些基本内容的教程。

现在我想在我的页面上添加一个时间线,所以我在我的 pr_list.rb (模型文件)中写了这个

def timeline
  @pr_lists.each do |pr_list|
    pr_list.pr_items.each do |pr_item|
      if pr_item.completed?
        @timeline = "#{pr_item.descrpition}: {#{pr_item.completed_at}}"
      end
    end
  end
end 

我在我的 pr_list/views/index 页面中调用了它。

<h1><%= pr_list.timeline %></h1>

但我明白了

NameError (undefined local variable or method `pr_list' for #<ActionView::Base:0x00000000029fb8>
Did you mean?  @pr_lists")

在这一点上,即使我只是像输出字符串一样编码它,它也不起作用。

如果我尝试其他任何事情,它会给我一个NoMethodError

而其余的方法都有效。如果我将上面的代码作为嵌入式红宝石写在 HTML.ERB 索引文件中,上面的代码也可以工作。

我是 Ruby on Rails 的新手。

标签: ruby-on-railsrubymodel-view-controller

解决方案


pr_list对于控制器中定义的块是本地的,因此无法从模板访问。

您可以从视图文件中迭代@pr_lists (请参阅此问题以供参考):

<% @pr_lists.each do |pr_list| %>
  <% pr_list.pr_item.each do |pr_item| %>
    <% if pr_item.completed? %>
      <h2><%= pr_item.description %>: <%= pr_item.completed_at %></h2>
    <% end %>
  <% end %>
<% end %>

推荐阅读