需要此错误的帮助。我无法弄清楚代码有什么问题。我在网上做了相关主题的研究,但我找不到任何解决方案。以下是代码。
<!-- 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 :(得分:1)
每个未定义的方法为nil:NilClass
错误归因于@articles
为nil
。您应该在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 :(得分:0)
@ Pavan的回答是正确的,将解决您的问题!当你开始时,我决定写下这个答案来解释发生了什么:
您已将根路由到#欢迎#index&#39;,即当您点击http://localhost:300/时,您从pip install django-bootstrap3
调用方法index
。我们习惯于从WelcomeController调用它的索引操作。
运行此方法后,它将(默认情况下)呈现文件WelcomeController
。看模式?操作名称与文件名相同,控制器名称与包含此文件的文件夹名称相同。
在此文件中,您使用的是app/views/welcome/index.html.erb
。这是在@articles
中定义的变量。
您的问题:此变量未在控制器中定义,从而产生一个零对象。即,它不存在。
解决方案:将此变量定义为@Pavan建议。
但是你可能会再次陷入同样的例外:如果你没有保存文章。为了防止这种情况,你只需要检查@articles是否为零,正如@Pavan所建议的那样。
希望这个答案能够澄清问题以及解决问题的建议!