我正在尝试在我的 Rails 项目中使用 Angularjs 进行客户端表单验证。我正在使用内置的 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]
但是,在这里,我在提交表单后在 post 请求中给我的电子邮件字段一个名称uEmail
和参数,这将是uEmail: 'xxx@xx.xx'
rails 无法理解的(默认情况下,Rails 期待类似的东西user: { email: 'xxx@xx.xx' ... }
)
我试图删除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