1

我还没有找到针对我的特定问题的解决方案,或者对它的理解不够,不知道去哪里找。

我有一个嵌套表单,可以根据 Railscast 196/197 动态生成新对象。这工作正常(在 rails 3.0.9 中),除了在更深层次(第 3 级)混合了 has_one 和 has_many。我不确定这是否是我不理解的必要 javascript 修改、关联或嵌套属性的初始化。

为简单起见,我将我的模型翻译为:有一棵树,它有_一个树干,还有_很多个苹果。每个苹果都有_one 核心和has_many 蠕虫。

当我创建一棵新树时,我的创建表单会自动显示树干的字段,以及一个带有一个核心和两个蠕虫的苹果的字段(我喜欢我的水果填充和社交......)。

我可以有条件地为中继创建一个“添加”链接,以防万一由于某种原因没有一个。

我可以为新苹果动态创建添加链接。但是,当我这样做时,它不会自动初始化为一个核心和两个蠕虫。我认为这是因为它是通过 javascript/helper 生成的,而不是在树控制器的“新”方法中,就像表单本身一样。

对于蠕虫来说,这并不是什么大问题,因为苹果可以有零个蠕虫,所以无论如何通常都有一个“添加蠕虫”链接是有意义的。然而,一个苹果应该只有一个核心,所以我不想要一个添加链接,它应该就在那里。

理想情况下,每个“添加苹果”都会初始化一个核心和两个蠕虫。

当我添加一个苹果时,我不知道如何调整 javascript/helper 来初始化苹果的嵌套属性(核心和蠕虫)。

另外,我不知道如何初始化苹果对象,以便它有一个自动初始化的核心对象。

我不知道,失败了,如何通过视图访问树控制器的 apple(s) 属性中的核心属性,这样我就可以做一些与树干类似的事情——也就是说,“如果由于某种原因主干不存在,请在 _form 部分中创建一个新的(或显示一个“添加”链接以创建一个新的)”。

= if @tree.trunk.blank? 
  - @tree.trunk= Trunk.new -# or 'display add button'
= f.fields_for :trunk do |builder|
  = render 'shared/trunk_fields', :f => builder

--> 这个,但又多了一层。如果我去 _apple_fields 部分并尝试类似@tree.apple/s.core 的东西,我会得到错误,如果我进一步进入 _core_fields 部分并尝试使核心可用于检查空白?我找不到能够访问许多苹果内核之一的正确语法。无论如何,它都不是理想的解决方案。

非常感谢任何指针。我猜这个解决方案真的很简单,而且我对这一切都太陌生了,看不到它......

4

0 回答 0