Может кто-нибудь объяснить поведение Rails для нескольких полей с одинаковыми именами и идентификаторами? - PullRequest
0 голосов
/ 12 января 2012

Мне нужно было создать маску ввода для средства выбора даты jQuery в моем приложении Rails, где первое поле формы использует формат m / d / yy, а средство выбора даты заполняет скрытый ввод правильным форматом базы данных.

Я использовал SimpleForm, и поэтому я расширил свой собственный ввод, так что перед вводом стоит маска.

Я все настроил, и при проверке браузера все работало хорошо, прежде чем я думал, что все будет готово.

Форма заканчивается двумя входами для одного и того же атрибута, каждый из которых имеет одинаковые идентификатор и имя. Я никогда не думал, что это сработает. Проверяя журнал разработки, я вижу только одну отправляемую дату, вторую из двух, которая имеет правильный формат для базы данных.

Это все хорошо? Должен ли я предпринять некоторые дополнительные шаги, даже если это работает нормально, и, что более важно, может кто-нибудь объяснить, что происходит под капотом, что приводит к такому поведению?

Спасибо !!

1 Ответ

0 голосов
/ 12 января 2012

Rails использует хэш params для хранения отправленных полей. Когда вы объявляете два или более ввода с использованием одного и того же имени, это происходит так же, как если бы вы делали что-то вроде

h=Hash.new
h[:name]="foo"
h[:name]="bar"

Результат равен bar, поскольку foo был перезаписан. Таким образом, "победитель" - это всегда значение поля, которое браузер последний раз добавлял к постданным.

Но если бы я был там, где вы, я бы не стал полагаться на браузер, что второе поле наконец-то добавляется.

...