2017-05-25 40 views
0

我试图打印所有与清单相匹配的项目。清单中的NoMethodError#show,未定义的方法`each'for#<Item:0x007f9e441517d0>

我得到了清单#秀,未定义的方法`每个错误NoMethodError”的#Item:0x007f9e441517d0

不知道是什么原因造成的,任何帮助,将不胜感激。

检视: 应用/视图/清单/ show.html.erb

<h1> <%= @checklist.name %> </h1>  
<ul class="item"> 
     <% @items.each do |item| %> 
       <li> 
         <%= item.item_name %> 
         <%= item.eta %> 
         <%= item.complete %> 
       </li> 
     <% end %> 

</ul> 

控制器: 应用程序/控制器/ checklists_controller.rb

def show 
     @checklist = Checklist.find(params[:id]) 
     @items = Item.find_by(checklist_name: @checklist.name) 
    end 
+0

在show动作中将checklist.name更改为checklist.id。您正在将checklist_id设置为名称。 –

+0

这是故意的。 Checklist_id是一个字符串,应该与Checklist表中的名称列相对应。我现在将列名checklist_id更正为checklist_name。 – user8067471

回答

0

鉴于清单和项目没有关联,并且您将要将checklist_id的名称更改为清单名称,那么下面的内容应该适合您。 Find_by将仅返回找到的第一条记录。哪里会返回所有记录。

def show 
    @checklist = Checklist.find(params[:id]) 
    @items = Item.where(checklist_name: @checklist.name) 
end 
+0

这是做到了。我知道我必须在我面前失去一些东西。我已更新原始文章,以便缺乏联系更加清晰。再次感谢。 – user8067471

0

的问题应是在这条线:

@items = Item.find_by(checklist_id: @checklist.name) 

更改为:

@items = Item.find_by(checklist_id: @checklist.id) 
+0

@checklist.name实际上是正确的。我想要名称列的值,而不是id列。我意识到我错误地列出了该列,但尚未在数据库中对其进行更正。 checklist_id是一个字符串,正在查找名称:来自清单。 – user8067471

+0

Rails惯例是通过它的id号码与另一个表相关联。然后您可以使用item.checklist.name获取名称。 –

+0

目前这些表格没有关联。他们可能应该是,我很可能会很快纠正。 在这种情况下,尽管'Item.find_by(checklist_id:@ checklist.name)'应该返回一个存储在@items中的项目数组。为什么@ items.each不起作用? – user8067471

相关问题