Rails client_side_validation自定义

时间:2012-08-29 19:51:15

标签: ruby-on-rails client-side-validation

我使用client_side_validation gem 并有疑问: 在我的client_side_validation.rb 我有

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  unless html_tag =~ /^<label/
    %{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}" class="message">#{instance.error_message.first}</label></div>}.html_safe
  else
    %{<div class="field_with_errors">#{html_tag}</div>}.html_safe
  end
end

在输出中我有:

<div>
  Name:
   <br>
   <div class="field_with_errors">
     <input id="user_username" type="text" size="30" name="user[username]"data-validate="true">
     <label class="message" for="user_username">Only letters allowed</label>
   </div>
</div>

我不想使用标签:

<label class="message" for="user_username">Only letters allowed</label>

我怎么能得到这样的东西:

<div class="message">Only letters allowed</div>

我试过放入我的rb文件:

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  unless html_tag =~ /^<label/
    %{<div class="field_with_errors">#{html_tag}<div class="message">#{instance.error_message.first}</div></div>}.html_safe
  else
    %{<div class="field_with_errors">#{html_tag}</div>}.html_safe
  end
end

并重新启动服务器 - 但在这种情况下,我只收到了div类的空message

帮助请... 怎么改变标准标签到Div?

1 个答案:

答案 0 :(得分:2)

在client_side_validations中有两个步骤来覆盖错误消息,您必须修改ActionView :: Base.field_error_proc或仅修改rails.validations.coffee(或JS)。

对于您要执行的操作,您不需要field_error_proc更改。你可以这样做:

window.ClientSideValidations.formBuilders['ActionView::Helpers::FormBuilder'] = {
  add: function(element, settings, message) {
    $(element).after($('<div>').attr('class', 'message').html(message));
  },
  remove: function(element, settings) {
    $(element).next().remove();
  }
}