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 の未定義メソッド「each」

特定の問題はこの行です:

<% @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 フィルターを作成する必要があります。

before_filter :load_blogs

def load_blogs
  @blogs = Blog.all
end

def index 
end

いくつかのコメント:

  • ページが読み込まれるたびにデータベースにクエリを実行する代わりに、データをキャッシュすることを検討してください
  • ページネーションの使用を検討して.allください。ブログが多すぎるとアプリが肥大化する可能性があります
于 2013-07-06T13:41:46.247 に答える
-1

新しいアクションでは @blogs が nil であるためです。あなたが試すことができます

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