Rails - 在表单中动态生成深层嵌套属性

时间:2011-11-29 17:10:54

标签: javascript ruby-on-rails-3 nested-forms dynamic-forms

我没有为我的特定问题找到解决方案,或者不了解它足以知道在哪里看。

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

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

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

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

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

这不是蠕虫的问题,因为苹果可以有零蠕虫,所以通常在那里通常有一个“添加蠕虫”链接是有意义的。但是,一个苹果应该有一个且只有一个核心,所以我不想要一个添加链接,它应该就在那里。

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

当我添加苹果时,我不知道如何调整javascript / helper来初始化apple(core和worms)的嵌套属性。

我不知道,或者,如何初始化apple对象,以便它自动初始化一个核心对象。

我不知道,如果没有这一切,如何通过视图访问树控制器的apple(s)属性中的core属性,这样我就可以做类似于trunk的操作 - 这是,“如果由于某种原因主干不在那里,在_form partial中创建一个新的(或显示一个'add'链接以创建一个新的链接)。

= 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部分并尝试使核心可用于检查空白?我无法找到能够访问众多苹果核心之一的正确语法。而且无论如何它都不是理想的解决方案。

非常感谢任何指针。我猜这个解决方案非常简单,而且我对这一切看起来太新了......

0 个答案:

没有答案