多个相关模型的新动作

时间:2012-02-01 10:06:26

标签: ruby-on-rails ruby-on-rails-3.1 multi-step

我有一个名为Nonsense的模型,其中包含FooBar

Nonsense的控制器中,我需要为FooBar

创建相关条目

我必须创建那些我需要在Foo操作中显示指向Barnew的链接的原因,因为应用程序的性质是{的详细信息<{1}}可能在NonsenseFoo填写完毕后才知道。

我在Bar的新操作中尝试做的是这个

Nonsense

现在我遇到的问题是在def new @nonsense = Nonsense.new @nonsense.bar = Bar.new @nonsense.foo = Foo.new ... 视图中,路径助手会抱怨show@nonsense.foo的ID为零。

在节目视图中,我只是@nonsense.bar@nonsense = Nonsense.find(params[:id]) nonsense

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

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

你能用一些默认细节保存吗?我没有太多使用过rails,但是如果你最终没有废话,我认为你需要小心清理它们。更重要的是,我怀疑你的工作流程和/或数据模型需要理顺,但也许我不熟悉更复杂的rails设置。

最后,如果所有这些事情都依赖于模型逻辑的一部分,那么您应该在Nonsense模型中创建这些对象并附加控制器所需的所有内容。否则,您将模型逻辑泄漏到控制器中。

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

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
...