我有一个名为Nonsense
的模型,它有一个Foo
和Bar
在我的Nonsense
控制器中,我需要为Foo
和Bar
创建相关条目
我必须创建那些我需要在new
操作中显示到Foo
和Bar
的链接的I的原因是,由于应用程序的性质,在填写Foo
和Bar
之前可能不知道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
...