如何为可能无限数量的子对象创建fields_?

时间:2014-04-19 17:32:20

标签: ruby-on-rails database forms activerecord model

我正在制作涉及为用户预约约会的申请。我有一个User模型和一个AvailableDate模型。用户has_many availble_dates和AvailableDate belongs_to用户。

我想为用户提供一个表单,以便他们可以在日历中标记几个日期,并且他们标记的每个日期都将成为与该用户关联的AvailableDate对象。

目前,我的解决方案是完成form_for帮助程序通常手动完成的所有工作。这涉及很多javascript,而且通常只是太乱了。

当我需要创建可能无限多的日期时,我无法弄清楚如何使form_for标记生效。理论上,用户可以在将来标记日期可用。如果我知道需要为用户创建多少日期,我可以使用user.available_dates.build,N次。但这在这里不起作用。

有人可以帮忙吗?这个问题应该很常见。我的应用程序设计错了吗?

2 个答案:

答案 0 :(得分:0)

一种技巧是在表单之外为关联呈现一次字段。

当用户执行应创建新输入集的任何交互时,您可以使用javascript克隆初始字段集并将其插入表单中。您需要做的一件事是更改这些输入的名称,使它们是唯一的。通常人们使用当前时间(以毫秒为单位)来表示此唯一标识符。

答案 1 :(得分:0)

去过那里&找到了几个可以提供帮助的资源:Tutorial& Cocoon

最重要的是,您需要确保child_index对每个字段都是唯一的。我使用的教程有child_index: Time.now.to_i来创建一个真正唯一的ID,因此您可以根据需要添加任意数量的字段

最好的方法:

  
      
  • fields_for渲染为部分(传递表单构建器对象)
  •   
  • 如果要添加新字段,请创建ajax_field操作
  •   
  • ajax_field视图拥有自己的form_builder
  •   
  • 你原来的和ajax_field表单会调用部分
  •   
  • 在前端,您可以使用JS来GET新的表单操作&将字段追加到页面
  •   

如果你想要我可以给你代码