ruby-on-rails - 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 的新手。
解决方案
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 %>