我有一个名为Nonsense
的模型,其中包含Foo
和Bar
在Nonsense
的控制器中,我需要为Foo
和Bar
我必须创建那些我需要在Foo
操作中显示指向Bar
和new
的链接的原因,因为应用程序的性质是{的详细信息<{1}}可能在Nonsense
和Foo
填写完毕后才知道。
我在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
知道为什么会这样吗?
答案 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
...