2017-05-25 42 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

相關問題