Sun*_*nil 2 ruby ruby-on-rails-3
现在我将ActionView :: Base.field_error_proc作为
Proc.new do |html_tag, instance|
if html_tag =~ /^<label/ or instance.respond_to?(:object_name)
%{<div class="field_with_errors">#{html_tag}</div>}.html_safe
else
%{<div class="field_with_errors">#{html_tag}<br /><label for="#{instance.send(:tag_id)}" class="message">#{instance.error_message.first}</label></div>}.html_safe
end
Run Code Online (Sandbox Code Playgroud)
当我使用client_side_validations gems时,我修改了这个来满足我的一些需求.
现在,'fields_with_error'div包围html_tag(即错误字段是特定的).我想知道的是,是否可以修改div class ="fields_with_error"的位置,并将其放在包含error_field的div之后.
例如,
<div class="main_div">
<%= password_field_tag 'secret', 'Your secret here' %>
</div>
Run Code Online (Sandbox Code Playgroud)
那么div class ="fields_with_error"应该被定位为
<div class="main_div">
<%= password_field_tag 'secret', 'Your secret here' %>
</div>
<div class="fields_with_error"> <label class="message"> The error message </label> </div>
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很有价值.
小智 8
因此,当我使用twitter bootstrap时,我通常会使用类似的东西创建初始化程序
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
html = %(<div class="field_with_errors">#{html_tag}</div>).html_safe
# add nokogiri gem to Gemfile
form_fields = [
'textarea',
'input',
'select'
]
elements = Nokogiri::HTML::DocumentFragment.parse(html_tag).css "label, " + form_fields.join(', ')
elements.each do |e|
if e.node_name.eql? 'label'
html = %(<div class="control-group error">#{e}</div>).html_safe
elsif form_fields.include? e.node_name
if instance.error_message.kind_of?(Array)
html = %(<div class="control-group error">#{html_tag}<span class="help-inline"> #{instance.error_message.uniq.join(', ')}</span></div>).html_safe
else
html = %(<div class="control-group error">#{html_tag}<span class="help-inline"> #{instance.error_message}</span></div>).html_safe
end
end
end
html
end
Run Code Online (Sandbox Code Playgroud)
这只是将常规错误调整为表单中的推特错误:>所以让一切都很好看;>.您可以使用相同的方法.
干杯如果有帮助的话