2012-01-03 29 views
0

默认情况下,simple_form以这种形式产生的错误信息:如何自定义simple_form输出错误文本跨度标题

<span class="error">"error_text"</span> 

,但我需要的是这样的:

<span class="error" title="error_text"></span> 

所以它会只是一个背景图像的跨度,当你悬停时显示错误信息

我研究了这个问题的答案(Customize error message with simple_form),但它似乎并没有包含我所需要的d:接受的答案建议自定义config/initializers/simple_form.rb。但是我无法找到你可以从那里做到这一点,它只是允许更改包含错误消息的标签,它是类和要显示的消息。

回答

1

这是我的同事(更有经验)如何处理这样的:

Added custom_errors.rb to lib/simple_form 

module SimpleForm 
    module Components 
    module CustomErrors 
     include SimpleForm::Helpers::HasErrors 

     def custom_error 
     enabled_error 
     end 

     def error_tag 
     options[:error_tag] || SimpleForm.error_tag 
     end 

     def error_text 
     if options[:error_prefix] 
      options[:error_prefix] + " " + errors.send(error_method) 
     else 
      errors.send(error_method) 
     end 
     end 

     def error_method 
     options[:error_method] || SimpleForm.error_method 
     end 

     def error_html_options 
     html_options_for(:error, [SimpleForm.error_class]) 
     end 

     protected 

     def enabled_error 
     # We need '<span title="Blah!"></span>' 
     template.content_tag(error_tag, '', error_html_options.merge({:title => error_text})) if has_errors? 
     end 

     def disabled_error 
     nil 
     end 

     def errors 
     @errors ||= (errors_on_attribute + errors_on_association).compact 
     end 

     def errors_on_attribute 
     object.errors[attribute_name] 
     end 

     def errors_on_association 
     reflection ? object.errors[reflection.name] : [] 
     end 
    end 
    end 

    module Inputs 
    class Base 
     include SimpleForm::Components::CustomErrors 
    end 
    end 
end 
0

如果您无法自定义simple_form来执行您所需的操作。您可能可以处理这与一些简单的JavaScript(jQuery的例子)使用:

//after the page loads, put the span's text in the title attribute and clear its text. 
$(function(){ 
    var $eSpan = $('.error:first'); 
    $eSpan.attr('title', $eSpan.text()).empty(); 
})