为什么我在Ruby on Rails中为nil:NilClass'得到错误'undefined method` each'?

时间:2013-07-06 13:34:47

标签: ruby-on-rails ruby html5

我对RoR很新,我非常感谢任何帮助!

我的'index'文件中有这段代码,但我想把它移到我的'应用程序'文件中,以便它出现在每个页面的导航中:

<ul class="blogs">
  <% @blogs.each do |blog| %>
    <li>  
      <%= link_to blog.name, blog.url, { :target => 'main-iframe'} %>
      <%= link_to 'Edit', edit_blog_path(blog) %>
    </li>
  <% end %>
</ul>
<%= link_to 'New Blog', new_blog_path %>

此工作正常并正确显示。然而,链接“编辑”和“新博客”根本不再起作用,它们将我带到下面的错误页面(请注意,链接在索引页面时工作正常):

博客中的NoMethodError #new

未定义的方法`each'代表nil:NilClass

具体问题是这一行:

<% @blogs.each do |blog| %>

网址仍然正确(/ blogs / new),但该行似乎阻止了此页面上的内容。

在我的blogs_controller.rb页面中,我(以及其他一些内容):

def index
  @blogs = Blog.all
end
def new
  @blog = Blog.new
end
def edit
end

有人可以帮我解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:2)

如果您希望它出现在多个页面上,您应该创建一个前过滤器:

before_filter :load_blogs

def load_blogs
  @blogs = Blog.all
end

def index 
end

一些评论:

  • 考虑缓存数据,而不是每次加载页面时查询数据库
  • 考虑使用分页,如果博客太多,.all可能会使您的应用膨胀

答案 1 :(得分:-1)

因为在新动作中@blogs是零。你可以尝试

def new
  @blogs = Blog.all
  @blog = Blog.new
end