接受Rails中名称中带方括号的表单字段

时间:2013-09-24 17:58:27

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

在Rails应用程序中,我遇到了一个案例,我想要一个以方括号结尾的复选框名称,例如:

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

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

2 个答案:

答案 0 :(得分:1)

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

  

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

来自HTML 4 Basic HTML data types

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

Rails使用方括号在params Hash中建立关联,所以你不应该弄乱这些名字。

答案 1 :(得分:0)

如果确实需要,您可以CGI.escape不想自动解析的值。然后,您将不得不CGI.unescape在另一端。

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