0

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

我的“索引”文件中有这段代码,但我想将它移动到我的“应用程序”文件中,以便它出现在每个页面的导航中:

<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

nil:NilClass 的未定义方法“每个”

具体问题是这一行:

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

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

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

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

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

谢谢

4

2 回答 2

2

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

before_filter :load_blogs

def load_blogs
  @blogs = Blog.all
end

def index 
end

一些备注:

  • 考虑在每次加载页面时缓存数据而不是查询数据库
  • 考虑使用分页,.all如果博客太多,可能会使您的应用膨胀
于 2013-07-06T13:41:46.247 回答
-1

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

def new
  @blogs = Blog.all
  @blog = Blog.new
end
于 2013-07-06T13:42:00.810 回答