1

2つのテストでこのエラーが発生しました。

test "should create question" do
  assert_difference('Question.count') do
    post :create, question: { question: 'apple', answer: "good", holder_id: 2}
  end
end

test "should not create question" do
  invalid_answer = "a" * 145 
  assert_difference('Question.count',0) do
    post :create, question: { answer: invalid_answer }
  end
  assert_template 'new'
end

私の作成アクション

#create action
def create
  @question = Question.new(params[:question])
  @holder = Holder.find_by_id(@question.holder.id)
  if @question.save
    flash[:success] = "Question Saved"
      redirect_to holder_path(@question.holder_id)
    else
        render 'new'
    end
end

スタックトレースは、両方の時間で作成行にあることを示しています。しかし、どうしてCalled id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_idエラーが発生するのでしょうか。

最初にオブジェクトを作成してから、それをpost createに渡す必要がありますか?

4

1 に答える 1

1
  @question = Question.new(params[:question])
  @holder   = Holder.find_by_id(@question.holder.id)

はい、その通りです。このテストを実行する前に、Holderインスタンスを作成する必要があります。

しかし、なぜすべてのivarを作成するのですか、新しいものが必要ですか?

そうでない場合は、コードを乾燥させることができるようです

def create
  question = Question.new(params[:question])
  if question.save
    flash[:success] = "Question Saved"
      redirect_to holder_path(question.holder) # but some checks are in order here, no?
    else
        render 'new'
    end
end

HTHロバート

于 2012-07-11T16:32:47.890 に答える