【问题标题】:Rails: Dynamically Generating form elements for a has_many relationshipRails:为 has_many 关系动态生成表单元素
【发布时间】:2013-04-12 00:22:12
【问题描述】:

我有一个模型,Lessonhas_many :lesson_objectives。每个Lesson 可以有无限数量的LessonObjectives——这就是问题所在。

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

但是我不确定两件事。

  • 将此行为添加到视图中的最佳方式。它可能需要大量的 jQuery,我不确定最佳实践。例如,如果用户删除“Objecive 5”,然后“Objective 6”将不得不重新排列以填充“Objective 5”怎么办?

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

    李>

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails forms associations


    【解决方案1】:

    您是正确的,您需要深入研究 JQuery 才能在输入默认的课程目标 2 后自动创建新的课程目标输入字段。

    例如,如果用户删除“Objecive 5”,然后“Objective 6”将不得不重新排列以填充“Objective 5”怎么办?

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

    这是关键,任何创建当前所有课程目标的显示都将是局部的。该部分将负责按顺序对目标进行编号。

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

    simple_form 很好,普通的旧 Rails 表单助手可以正常工作。您的意图不会影响您对表单技术的选择。

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

    只需记住 rails 助手如何命名输入的基础知识:

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

    您可以使用开箱即用的普通旧导轨做任何您想做的事情。最困难的部分将是 jquery 添加具有正确名称的新输入字段,以便它们正确发布。

    【讨论】:

    • 感谢您的回答,这让我明白了很多。 Lesson[LessonObjective][1]Lesson[LessonObjective][2] 是否会成为部分字段的表单命名约定 - 以便 rails 能够理解这种关系?
    • 只要确保整数值是 LessonObjective 对象的实际 id 值,(1,2,3..) 序列是人为的,由视图创建。
    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多