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。

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

简而言之,这里没有人有任何线索,因为这还不够信息。我们不知道您的模型是如何设置的。

但是在调试“不会保存”的模型时,通常最好使用 bang 版本savesave!. 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 回答