如何自定义Ruby on Rails验证错误?

Goa*_*lie 1 validation ruby-on-rails

目前,当存在验证错误时,将在我的表单中呈现divwith class="field_with_errors":

<form method="post" action="/users" accept-charset="UTF-8">
  <div class="field_with_errors">
    <input id="user_email" type="text" value="tom@test.com" name="user[email]">
  </div>
  <input id="user_password" type="password" value="mypass" size="30" name="user[password]">
  <input id="user_submit" type="submit" value="Submit" name="commit">
</form>
Run Code Online (Sandbox Code Playgroud)

如果不使用额外的gem并在Rails 3环境中,有没有办法修改验证错误的呈现方式?例如,我希望在带有错误divinput标记之后呈现验证错误:

<input id="user_email" type="text" value="tom@test.com" name="user[email]"><div class="field_with_errors"></div>
Run Code Online (Sandbox Code Playgroud)

另外,有没有办法呈现特定的错误?如果是电子邮件错误,则div在输入文本框之后呈现并生成"重新输入您的电子邮件"消息.

(到目前为止,我所做的大多数搜索都使用gems作为解决方案.)

Sou*_*amy 5

1.您可以通过重写ActionView :: Base.field_error_proc来删除field_with_errors包装.可以通过将它放在config/application.rb中来完成:

config.action_view.field_error_proc = Proc.new { |html_tag, instance| "#{html_tag}".html_safe }
Run Code Online (Sandbox Code Playgroud)

参考

Rails 3:"field-with-errors"包装器改变了页面外观.怎么避免这个?

2.您可以在特定字段上显示错误消息.

<input id="user_email" type="text" value="tom@test.com" name="user[email]">
<% if @user.errors.on(:email).present? %>
   <span class="error">Re-enter your email(or)<%= @user.errors.on(:email) %></span>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后在你的CSS中

.error {
  color: red;
}
Run Code Online (Sandbox Code Playgroud)