2017-05-25 5 views
0

チェックリストに一致するすべての項目を印刷しようとしています。私は#ITEMためのエラーチェックリスト#ショーでNoMethodError、未定義のメソッド `各」を得るチェックリストのNoMethodError#表示されている未定義のメソッド「each」#<Item:0x007f9e441517d0>

: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テーブルのnameカラムに対応する必要があります。 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列ではなく、name列の値が必要です。私は列の誤った名前をつけて、まだデータベースでそれを修正していないことに気付きました。 checklist_idは文字列であり、チェックリストから名前を探しています。 – user8067471

+0

Railsの規約は、そのID番号を使って別のテーブルに関連付けることです。 item.checklist.nameを使用して名前を取得できます。 –

+0

現在、テーブルは関連付けられていません。彼らはおそらくすべきであり、私はおそらくそれを直ちに修正するでしょう。 'Item.find_by(checklist_id:@ checklist.name)'は@itemsに格納されている項目の配列を返すべきです。なぜ@ items.eachは機能しないのですか? – user8067471