2017-06-18 3 views
-1

Screenshot PhotoWelcome#indexのNoMethodError - Rails入門

このエラーのヘルプが必要です。私はコードに何が間違っているのか分かりません。関連トピックをオンラインで調査しましたが、解決策が見つかりません。以下はそのコードです。

<!-- index.html.erb --> 

<h1>Hello, Rails!</h1> 
<%= link_to 'My Blog', controller: 'articles' %> 
<%= link_to 'New article', new_article_path %> 

<table> 
    <tr> 
    <th>Title</th> 
    <th>Text</th> 
    </tr> 

    <% @articles.each do |article| %> 
    <tr> 
     <td><%= article.title %></td> 
     <td><%= article.text %></td> 
     <td><%= link_to 'Show', article_path(article) %></td> 
     <td><%= link_to 'Edit', edit_article_path(article) %></td> 
     <td><%= link_to 'Destroy', article_path(article), 
       method: :delete, 
       data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 
</table> 

ここはコントローラのコードです。

# welcome_controller.rb 
class WelcomeController < ApplicationController 
    def index 
    end 
end 

コンフィグコード

# routes.rb 
Rails.application.routes.draw do 
    get 'welcome/index' 
    resources :articles 
    root 'welcome#index' 
end 

任意の助けいただければ幸いです!ゼロのための未定義のメソッド各

+0

'@ articles'はnilです。私たちにあなたの 'welcome_controller'を表示してください – Pavan

+0

上記のコードを更新するコードを更新します。 – jamespd

答えて

1

:NilClass

エラーが@articlesによるものではnilあります。あなたはPavanの答えが正しいとあなたの問題を解決します@

<% unless @articles.blank? %> 
    <% @articles.each do |article| %> 
    <tr> 
     <td><%= article.title %></td> 
     <td><%= article.text %></td> 
     <td><%= link_to 'Show', article_path(article) %></td> 
     <td><%= link_to 'Edit', edit_article_path(article) %></td> 
     <td><%= link_to 'Destroy', article_path(article), method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 
<% end %> 
+1

補完:それを繰り返す前に記事がindex.html.erbでnilであるかどうかチェックすると便利です。 –

+1

@ThiagoUrurayはい、回答が更新されます! – Pavan

+1

あなたはとてもパパンです。すべては今働いている!ありがとう! – jamespd

0

、このようなエラーを回避するためにindex.html.erbを微調整することができますしかし、あなたはwelcome#index

class WelcomeController < ApplicationController 
    def index 
    @articles = Article.all 
    end 
end 

でそれを定義する必要があります!あなたが始めるように、私は何が起こっているか、もう少し説明して、この答えを書くことにした:

あなたはhttp://localhost:300/を打ったとき、すなわち、それはあなたがWelcomeControllerからメソッドindexを呼び出し、「歓迎#インデックス」にルートをルーティングしています。 WelcomeControllerからインデックスアクションと呼ばれています。

このメソッドを実行すると、デフォルトでファイルapp/views/welcome/index.html.erbがレンダリングされます。パターンを見ますか?アクション名はファイル名と同じで、コントローラー名はこのファイルを含むフォルダー名と同じです。

このファイルでは、@articlesを使用していました。これはWelcomeController#indexで定義された変数です。

問題:この変数がコントローラに定義されていないため、結果としてnilオブジェクトになります。私は、それは存在しませんでした。

解決策:この変数を@Pavan suggestとして定義します。

ただし、記事を保存していない場合は、同じ例外が再び発生する可能性があります。この場合を防ぐために@Pavanも提案したように@articlesがnilであるかどうかを確認するだけです。

この回答が問題を明確にし、それを解決するための提案を希望します。