【问题标题】:Accepting form fields with square brackets in the name in Rails在 Rails 中接受名称中带有方括号的表单字段
【发布时间】:2013-09-30 02:09:01
【问题描述】:

在 Rails 应用程序中,我遇到了一个情况,我希望有一个以方括号结尾的复选框名称,例如:

name="foo[bar][baz[]]"

其他特殊字符似乎得到了正确处理,但看起来 Rails 正在剥离方括号并将它们视为声明数组而不是名称的一部分。需要做什么来允许此名称中的任意字符(特别是括号)并让 Rails 正确处理它们?

【问题讨论】:

  • 如果您想将一组元素分配给您正在寻找的变量 name="foo[bar][baz][]"
  • 你能解释一下你想做什么吗?
  • 我试图支持复选框名称中的所有字符(我猜除了空格,HTML5 规范禁止)。我注意到,当我尝试命名一个 baz[] 时,由于 Rails 关于方括号的逻辑,它没有得到正确处理。我想知道是否有办法转义括号(和其他特殊字符?),以便它们正确通过。
  • 没有。不要告诉我您的编程解决方案,因为它显然是错误的。给我看代码并用简单的话解释你想要得到什么结果。
  • 代码是<input name="foo[bar][baz[]]" type="checkbox" value="1">。我期待params 包含foo{"bar"=>{"baz[]"=>"1"}} 键。相反,该键的值是{"bar"=>{"baz"=>[nil]}}

标签: ruby-on-rails arrays forms escaping square-bracket


【解决方案1】:

如果你真的需要,你可以CGI.escape你不想自动解析的值。然后你必须在另一边CGI.unescape他们。

"foo[bar][#{CGI.escape(name)}]"
CGI.unescape(params[:foo][:bar])

【讨论】:

    【解决方案2】:

    那是因为规范中不允许使用方括号:

    ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,并且可以是 后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、 下划线(“_”)、冒号(“:”)和句点(“.”)。

    来自HTML 4 Basic HTML data types

    关于 Rails 部分,并结合这两个答案(12):

    Rails 使用方括号在 params Hash 中建立关联,因此您不应该混淆这些名称。

    【讨论】:

    • 我使用的是 HTML5,我认为它更宽松。而且 Rails 已经使用括号作为框架的一部分(如果它违反规范,这很有趣)。
    • 首先你完全错了。将(几乎)完全按照 OP 所写的方式描述一组复选框。
    • 好的,经过一番折腾,你的回答完全没问题,投了赞成票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多