Rails:动态生成has_many关系的表单元素

时间:2013-04-12 00:22:12

标签: ruby-on-rails forms associations

我有一个Lesson模型has_many :lesson_objectives。每个Lesson都可以拥有无​​限数量的LessonObjectives - 这是问题的一部分。

我计划将这两个模型的控制器/视图集成在一起 - 这样每当有人想要创建Lesson时,他们也必须为它提供所有LessonObjective。我想要一个解决方案,默认情况下,用户可能会看到两个字段,例如“Objecive 1”和“Objective 2”,然后随着用户输入的那样随时添加任何后续字段。当用户填写“目标n”时,将自动显示“目标n + 1”字段。

但是我不确定两件事。

  • 将此行为添加到视图中的最佳方法。它可能需要大量的jQuery,我不确定最佳实践。例如,如果用户删除“Objecive 5”然后“目标6”必须被洗牌以填充“目标5”,该怎么办?

  • 如何配置表单字段(名称,ID),以便Rails能够理解行为并能够在不破坏rails约定的情况下保存数据并保持RESTful和DRY。

如果宝石有帮助,请随时提出建议!我一直在使用SimpleForm和其他一些。

谢谢!

1 个答案:

答案 0 :(得分:1)

你输入默认的lessonObjective2后,你需要深入研究JQuery以自动创建新的LessonObjective输入字段。

  

例如,如果用户删除“Objecive 5”然后“目标6”将被拖曳以填充“目标5”该怎么办?

最佳实践规定不涉及JQuery,但会涉及PARTIAL!和AJAX。

这是关键,无论是什么创造了当前所有课程的显示,目标都是局部的。这部分将负责按顺序编号目标。

然后,如果你有一个'删除'链接(remote => true),并点击一个删除一个lessonObjective的控制器动作,该控制器将呈现导致部分重新渲染的javascript,这次是一个新的所有课程目标的列表(减去您刚删除的那个)。

simple_form很好,普通的旧轨道形式帮手可以正常工作。没有任何关于您的意图会影响您选择的表单技术。

  

如何配置表单字段(名称,ID),以便Rails能够理解行为并能够在不破坏rails约定的情况下保存数据并保持RESTful和DRY。

请记住rails帮助程序如何命名输入的基础知识:

如果您的表单是foo,并且该表单中的输入是bar,则其名称为'foo [bar]'

你可以用开箱即用的普通旧导轨做你想做的一切。最难的部分是jquery添加具有正确名称的新输入字段,以便它们能够正确发布。