0

ユーザーがトピックを作成し、他のユーザーがトピックに関するコメントを投稿できるアプリケーションを作成しました。今すぐトピックを作成して post.form を作成できますが、コメントを投稿すると

NoMethodError in Posts#create 

undefined method `each' for nil:NilClass

Extracted source (around line #2):

1: 
2: <% for topic in @topics do %>  
3:   <li><%=link_to topic.title, topic_path(topic) %></li>  
4: 
5:  <%= will_paginate @topics %>

私の投稿コントローラーは次のとおりです。

class PostsController < ApplicationController
    before_filter :signed_in_user, only: [:create, :destroy]
  before_filter :correct_user, only: :destroy


    def create
        @post = current_user.posts.build(params[:post])
        if @post.save
            flash[:success] = "Konu oluşturuldu!"
                redirect_to topic_path(topic)
        else
            render 'static_pages/home'
        end
    end

  def destroy
    @post.destroy
    redirect_to root_path
  end
  private

    def correct_user
      @post = current_user.posts.find_by_id(params[:id])
      redirect_to root_path if @post.nil?
    end
end

投稿を作成すると、localhost/posts にリダイレクトされますが、そのトピックにとどまることを望みます。どうすれば正しくリダイレ​​クトできますか?

4

1 に答える 1

4

@topics.each doの代わりに使用する方が優れており、はるかに簡潔だと思いますfor topic in @topics do

@topics基本的に、作成アクションでは、値を割り当てていないようです。なので、ゼロになります。nil を列挙しようとする定義済みのメソッドが存在しないため、ruby は Nil クラスの method_missing メソッドを調べ始めます。そこで処理が見つからないため、次の例外が生成されます。

何らかの値を割り当てることをお勧めします@topics

于 2012-06-26T07:11:41.363 に答える