【问题标题】:Rails JavaScript validations on dynamic nested model fields动态嵌套模型字段上的 Rails JavaScript 验证
【发布时间】:2011-06-10 09:46:13
【问题描述】:

我有一个嵌套模型表单,用户可以在其中创建一个“项目”,其中可以包含任意数量的“任务”,这些“任务”由任务“名称”和“描述”组成。这些任务由用户使用 jQuery 动态添加。

我想为每个任务中的字段提供客户端验证,目前我正在使用livevalidation 插件。

问题是输入字段被赋予一个基于当前时间的动态 id,因为当提交表单时,Rails 必须是唯一的才能执行它的工作。

在我看来,我有两个选择:

  1. 以某种方式让 javascript 验证接受通配符,以便每次添加任务时,都可以根据其 id 中不变的部分对其字段设置验证。

  2. 在创建任务的同时创建必要的内联验证 javascript。

上述方法可行吗?有没有更好的选择?如何从部分 id 匹配中选择一个元素到验证器中?

谢谢

【问题讨论】:

    标签: javascript jquery ruby-on-rails validation nested-attributes


    【解决方案1】:

    我建议使用jQuery Validation Plugin。它允许您根据属性名称而不是它们的 ID 创建验证,并且您可以对不同的表单使用相同的规则集:

    验证= {规则:{“名称”:“必需”,“描述”:“必需”}} jQuery("#form-1").validate(验证); jQuery("#form-2").validate(验证);

    如果你想传递明确的 id,你可以使用一个函数来生成你的规则:

    功能验证规则(索引){ 返回 { 规则:{ "name["+index+"]": "必填", "描述["+index+"]": "必需" } }; }

    【讨论】:

    • 谢谢潘,我确实尝试过这个插件,但是在定位错误消息时缺乏控制让我很沮丧,这就是我使用 livevalidation 的原因。
    • 您可以使用 jQuery 插件的 errorPlacement 属性覆盖错误消息的定位方式。这意味着您可以将它们放置在页面上的任何位置,并使用您想要的任何 CSS 类来设置它们的样式。
    • 对,我只是试图实现你的解决方案,但不幸的是 Rails 接受_nested_attributes_for 要求“id”和“name”都是唯一的,例如 回到绘图板:-(
    • 您可以在不显式编写索引的情况下实现数组:project[task_attributes][][name] 这样第一个此类实例的索引为 0,第二个实例的索引为 1,依此类推。让 HTML 处理这些属性允许您编写通用验证规则。如果您觉得您仍然必须使用显式索引,您可以使用一个函数创建验证规则,该函数采用显式索引并使用它填充您的验证规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多