多个相关的模型新动作



我有一个名为Nonsense的模型,它有一个FooBar

在我的Nonsense控制器中,我需要为FooBar 创建相关条目

我必须创建那些我需要在new操作中显示到FooBar的链接的I的原因是,由于应用程序的性质,在填写FooBar之前可能不知道Nonsense的详细信息。

我想在Nonsense的新操作中做的是这个

def new
  @nonsense = Nonsense.new
  @nonsense.bar = Bar.new
  @nonsense.foo = Foo.new
...

现在我遇到的问题是,在show视图中,路径助手将抱怨@nonsense.foo@nonsense.bar的id为零。

在显示视图中,我只做@nonsense = Nonsense.find(params[:id])nonsense accepts_nested_attributes_for :foo, :bar

知道为什么会发生这种事吗?

我不认为Bar.new实际上在数据库中创建了一个对象,所以id实际上仍然为零。如果你想要链接到这些对象,你需要先保存它们。

你能用一些默认的细节保存它们吗?我用铁轨的次数不多,但我认为如果你最终不犯下胡说八道的话,你需要小心清理铁轨。更重要的是,我怀疑你的工作流程和/或数据模型需要理顺,但也许我只是不熟悉更复杂的轨道设置。

最后,如果所有这些都是依赖的,并且是Model逻辑的一部分,那么您可能应该在Nonsense模型中创建这些对象,并附加控制器所需的一切。否则,您会让Model逻辑泄漏到控制器中。

更明确地说(顺便说一句,我很确定这是糟糕的rails形式,即使它有效):

def new
  @nonsense = Nonsense.new
  @nonsense.bar = Bar.new
  @nonsense.bar.any_necessary_attributes = some_value
  @nonsense.bar.save
  @nonsense.foo = Foo.new
  @nonsense.foo.any_necessary_attributes = some_value
  @nonsense.foo.save
...

最新更新