增加值:params []

时间:2012-08-22 17:11:55

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我有什么:(在控制器中采取行动)

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未保存在数据库中。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

编辑:好的哎呀,我现在看到了......

模型只在初始化时使用一个哈希值,而不是2。

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

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

但是在调试“无法保存”的模型时,使用爆炸版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

答案 1 :(得分: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