2017-06-18 12 views
-1

Screenshot PhotoNoMethodError在歡迎#指數 - 入門使用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'爲零。告訴我們你的'welcome_controller' – Pavan

+0

我會更新代碼更新上面的代碼。 – jamespd

回答

1

每一個用於零未定義方法:NilClass

的錯誤是由於@articlesnil。你應該在welcome#index

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

定義它不過你可以調整index.html.erb,以避免此類錯誤

<% 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通過它 –

+1

@ThiagoUruray是,將更新的答案迭代之前! – Pavan

+1

你真棒@Pavan。現在所有人都在工作!謝謝! – jamespd

0

@帕文的答案是正確的,將解決您的問題!正如你入門,我決定寫這個答案來解釋多一點發生了什麼事:

你的路由根的歡迎#指數「,即,當你打http://localhost:300/它調用方法indexWelcomeController。我們習慣將它稱爲WelcomeController的索引操作。

運行此方法後,將(默認)使該文件app/views/welcome/index.html.erb。看到模式?操作名稱與文件名稱相同,控制器名稱與包含此文件的文件夾名稱相同。

在你使用@articles此文件。這是在WelcomeController#index中定義的變量。

您的問題:該變量沒有在控制器中定義,導致一個零對象。即,它不存在。

解決方案:爲@Pavan建議定義此變量。

但是,你可能會再次陷入同樣的​​情況例外:如果你還沒有的文章保存。爲了防止這種情況,你只需要檢查@articles是否爲零,就像@Pavan建議的那樣。

希望這個答案會澄清這個問題,解決這個問題的建議!