Принятие полей формы с квадратными скобками в имени в Rails

В приложении Rails я столкнулся с случаем, когда я хотел бы иметь имя флажка, которое заканчивается в квадратных скобках, например:

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

Другие специальные символы, кажется, обрабатываются правильно, но похоже, что Rails убирает квадратные скобки и рассматривает их как объявление массива, а не как части имени. Что нужно сделать, чтобы разрешить произвольные символы (в частности, скобки) в этом имени и правильно ли они обрабатывались Rails?

1 ответ

Это потому, что квадратные скобки не допускаются в спецификации:

Токены ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисов ("-"), подчеркиваний ("_"), двоеточия (":") и точки (".").

из HTML 4 Основные типы данных HTML

О части Rails, и объединение этих двух ответов ( 1 и 2):

В Rails используются квадратные скобки для связи в параметрах Hash, поэтому не стоит связываться с этими именами.

Если вам действительно нужно, вы можете CGI.escapeзначения, которые вы не хотите анализировать автоматически. Тогда вам придется CGI.unescape их с другой стороны.

"foo[bar][#{CGI.escape(name)}]"
CGI.unescape(params[:foo][:bar])
Другие вопросы по тегам