Siz de benim gibi, rails için ajax ile form kontrolü yapmaya çalıştıysanız RTV eklentisi ile karşılaşmış olabilirsiniz. Bu eklenti sayesinde bir kaç satır ile bu işi halledebiliyoruz. Ancak alanların hangi sorunlar yüzünden kızardığını, bize göstermiyor. Bu sorunla karşılaştıysanız şu hazırladığım yamayı kullanarak bu derdi tarihe gömebilirsiniz.
Index: realtime_validation/lib/realtime_validation_system.rb
===================================================================
--- realtime_validation/lib/realtime_validation_system.rb (revision 19)
+++ realtime_validation/lib/realtime_validation_system.rb (working copy)
@@ -85,12 +85,14 @@
obj.valid?
js = < <-END_OF_STRING
- function highlightFormField(fieldId, valid)
+ function highlightFormField(fieldId, valid, str)
{
if(null == (ele = $(fieldId)))
return;
markerId = fieldId + '_rtv_state'
+ messageId = fieldId + '_failm';
marker = $(markerId);
+ txt = $(messageId);
if(marker == null)
{
par = ele.parentNode;
@@ -98,19 +100,30 @@
marker = document.createElement('span');
marker.id = markerId;
marker.appendChild(ele);
+ txt = document.createElement('span');
+ txt.className = 'fieldWithErrorsMessage';
+ txt.id = messageId;
par.appendChild(marker);
+ par.appendChild(txt);
}
+ txt.innerHTML = str;
marker.className = ("fieldWith" + (valid ? 'out' : '') + "Errors");
}
END_OF_STRING
map = send(state_map_method_name, obj, Hash.new)
map.each{|field_id, valid|
+ unless valid
+ err = obj.errors[field_id.split('_')[1]]
+ err = err.join(',') if err.is_a?(Array)
+ end
js << <<-END_OF_STRING
- highlightFormField('#{field_id}', #{valid});
+ highlightFormField('#{field_id}', #{valid}, "#{err}");
END_OF_STRING
}
- RAILS_DEFAULT_LOGGER.debug js
+
+
+ RAILS_DEFAULT_LOGGER.debug js
render(:text => js)
end
Bu yama ile form alanının yanına ‘fieldWithErrorsMessage’ sınıfında bir span ekleniyor. css ile biraz şekil vererek bu hataları istediğiniz gibi gösterebilirsiniz. Biraz girintileme derdi var ama olur o kadarcık. Enver kesin bu yamayı geri gönderirdi