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

时间:2012-04-18 04:34:23

标签: ruby-on-rails validation

目前,当出现验证错误时,div 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>

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

<input id="user_email" type="text" value="tom@test.com" name="user[email]"><div class="field_with_errors"></div>

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

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

1 个答案:

答案 0 :(得分: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 }

参见

Rails 3: "field-with-errors" wrapper changes the page appearance. How to avoid this?

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 %>

然后在你的CSS中

.error {
  color: red;
}