2

我使用 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 ?

4

1 回答 1

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();
  }
}
于 2012-11-18T21:53:36.433 回答