Hello, I am stuck with a realtime form validation. I obtained information on how to build real time form validaion on:
http://blog.andyamiri.com/2008/05/ajax-form-validation-for-rails.html
It has worked great.... but... until now I have not been able to validate a password confirmation field for the form. The problem is based on my limitation to modify the code to accept two different field values to validate. I would appreciate it very much if someone could help me. Thanks in advance.
Here is the code:
def error_message_for(model, field, options = {}) options[:success_css_class] ||= 'success' options[:error_css_class] ||= 'error' options[:hint_css_class] ||= 'hint' tag_id = "#{model}_#{field}_validator" js = observe_field "#{model}_#{field}", :function => "new Ajax.Request( '/usuario/validate?field=#{field}&value=' + value, { method: 'get', onSuccess: function(transport) { element = document.getElementById('#{tag_id}'); var output = transport.responseText; var css_class = '#{options[:error_css_class]}'; if (output.length == 0) { output = '#{options[:success]}'; css_class = '#{options[:success_css_class]}' } element.innerHTML = output; element.setAttribute('class', css_class); } } );" tag = content_tag :span, options[:hint], :id => tag_id, :class => options[:hint_css_class] return tag + js end
This "helper" triggers the observe_field for changes... when the field is changed it sends the "value" of the "field" to a function called "validate" which I show next:
def validate field = params[:field] user = User.new(field => params[:value]) output = "" user.valid? if user.errors[field] != nil if user.errors[field].class == String output = "#{user.errors[field].slice(2,100)}" else output = "#{user.errors[field].slice(2,100)}" end end render :text => output end
which then returns the result and gets displayed on the view... I need to somehow add the "password_confirmation" field to the process so that I can then validate that it is equal to the password. Thanks again.