Я пытаюсь использовать Angularjs для проверки формы на стороне клиента в моем проекте Rails. Я использую встроенную директиву ng-show для отображения ошибок в полях формы. Код очень прост:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name),
html: { novalidate: true, name: 'signUpForm'}) do |f| %>
...
<%= f.email_field :email, :'ng-model'=>'user.email', name: 'uEmail',
autofocus: true, required: true %>
...
<div ng-show="signUpForm.uEmail.$dirty && signUpForm.uEmail.$invalid">
<span ng-show="signUpForm.uEmail.$error.required">
<small class="error">Tell us your email.</small>
</span>
<span ng-show="signUpForm.uEmail.$error.email">
<small class="error">This is not a valid email.</small>
</span>
</div>
<% end %>
Это дает мне хорошую проверку на стороне клиента, но проблема в том, что Rails по умолчанию дает имя поля формы, такое как model[attr]
в моем случае user[email]
Однако здесь я даю своему полю электронной почты имя uEmail
, а параметры в почтовом запросе после отправки формы будут uEmail: '[email protected]'
, которые рельсы не могут понять (по умолчанию Rails ожидает что-то вроде user: { email: '[email protected]' ... }
)
Я попытался удалить name: 'uEmail'
и вернуться к Rails по умолчанию user[email]
и использовать что-то подобное в директиве ng-show
<span ng-show="signUpForm.user[email].$error.required">
Но это не сработает, кто-нибудь знает, как с этим обойти?
btw: rails -v 4.0 Angularjs version: 1.0.7