Принятие полей формы с квадратными скобками в имени в 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])