1

我有一个名为Nonsensewhich has_one of Fooand的模型Bar

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

我必须创建那些我需要在操作中显示链接的Foo原因,因为应用程序的性质,在填写之前可能不知道详细信息。BarnewNonsenseFooBar

我在新行动中想要做的Nonsense

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

现在我遇到的问题是,show路径助手会抱怨 id@nonsense.foo并且@nonsense.bar是 nil。

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

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

4

1 回答 1

0

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

您可以使用一些默认详细信息保存它们吗?我没有太多使用rails,但我认为如果你最终没有犯下废话,你需要小心清理那些。更重要的是,我怀疑您的工作流程和/或数据模型需要理顺,但也许我只是不熟悉更复杂的 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
...
于 2012-02-01T10:12:22.570 回答