0

私が持っているもの:(コントローラーでのアクション)

def create
  @test = Test.new(params[:test])
  @test.save

  devicefiles = params[:devicefiles]
  if devicefiles != nil
    devicefiles.each do |attrs|
      devicenote = Testdevicenote.new(attrs, :test_id => @test.id)
      devicenote.save
    end
  end

end

このコントローラ アクションはエラー メッセージを表示せず、ビューをレンダリングしていますが、:test_id はデータベースに保存されていません。どうすればこれを解決できますか?

4

2 に答える 2

1

編集:おっと、今見ました...

モデルは、初期化時に 2 つではなく 1 つのハッシュのみを取ります。

Testobjectnote.new(attrs.merge(:test_id => @test.id))

要するに、ここでは誰も手がかりを持っていません。それは十分な情報ではないからです。モデルがどのように設定されているかわかりません。

しかし、「保存されない」モデルをデバッグするときは、多くの場合、bangsaveバージョンsave!. saveを返すtruefalse、レコードを保存できたかどうかを知らせます。ただしsave!、モデルを保存できない場合は例外が発生し、例外によって理由がわかります。

その例外は、レコードが保存されていない理由を示している可能性があります。


また、通常は、ID を自分で管理するよりも、関連付けを使用する方が適切です。

def create
  @test = Test.new(params[:test])

  if params[:devicefiles]
    params[:devicefiles].each do |attrs|
      @test.testdevicenotes << Testdevicenotes(attrs)
    end
  end

  @test.save
end
于 2012-08-22T17:23:28.627 に答える
0

ビューを作成アクションに投稿しているフォームに投稿していないため、言うのは難しいですが、典​​型的な Rails フォームの場合は、おそらく次のようになります。

def create
  @test = Test.new(params[:test])
  @test.save

  devicefiles = params[:test][:devicefiles]
  if devicefiles != nil
    devicefiles.each do |attrs|
      devicenote = Testdevicenote.new(attrs, :test_id => @test.id)
      devicenote.save
    end
  end

  objectfiles = params[:test][:objectfiles]
  if objectfiles != nil
    objectfiles.each do |attrs|
      objectnote = Testobjectnote.new(attrs, :test_id => @test.id)
      objectnote.save
    end
  end
end

これは、:devicefiles と :objectfiles が :test の形式の中にあることを前提としています。

于 2012-08-22T17:22:42.337 に答える