2012-06-10 19 views
5

Ésta es mi modelo User:validaciones del lado del cliente no funciona en la producción, sino que trabaja en el desarrollo

class User < ActiveRecord::Base 
    rolify 
    devise :database_authenticatable, :registerable, :token_authenticatable, :confirmable, :timeoutable, 
     :recoverable, :rememberable, :trackable, :validatable, 
       :email_regexp => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 

    attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :confirmed_at, :confirmation_token 
    validates_uniqueness_of :email, :case_sensitive => false 
    validates_confirmation_of :password 

end 

Gemfile:

gem 'client_side_validations'

Forma:

<%= form_for(resource, :as => resource_name, :class => "send-with-ajax", :url => user_registration_path(resource), :validate => true, :html => { :id => 'user_new' }) do |f| %> 
       <%= f.text_field :email,:placeholder => "[email protected]", :input_html => {:autofocus => true}, :validate => true %> 
       <%= f.submit :label => "Submit", :value => "Sign Me Up!" %> 
     <div class="ajax-response"><%= devise_error_messages! %></div> 
      <% end %> 

Debería funcionar cuando salga del campo, aquí hay una captura de pantalla trabajando a nivel local:

client_side_validation local

Pero cuando lo hago en la producción, no funciona en absoluto y aún no hay errores en el archivo de registro o en la consola JS.

Edición 1:

Los mensajes de validación no se muestran.

En los registros de Heroku, veo esto cada vez que intento una dirección de correo electrónico 'válida':

2012-06-10T18:44:55+00:00 app[web.1]: Started GET "/validators/uniqueness?case_sensitive=false&user%5Bemail%5D=abc%40tell.com" for xx.xxx.xx.x2 at 2012-06-10 18:44:55 +0000 
2012-06-10T18:44:55+00:00 heroku[router]: GET myapp.heroku.com/validators/uniqueness?case_sensitive=false&user%5Bemail%5D=abc%40tell.com dyno=web.1 queue=0 wait=0ms service=221ms status=404 bytes=4 

Pero no me muestra un mensaje en mi página como lo hace localmente.

Además, la única vez que veo esa solicitud HTTP en el registro es cuando intento una cadena que tiene una estructura de correo electrónico 'válida' - como [email protected]. Pero si intento algo como abc no me da el mensaje que espero - invalid address - ni el registro muestra nada.

Edición 2:

Intenté funcionar mi servidor local en production mode y yo estoy viendo el mismo problema que en Heroku. Entonces parece que el problema puede no tener nada que ver con Heroku, sino más bien con la producción.

Este es el código HTML generado a partir de la forma en la producción:

<form accept-charset="UTF-8" action="/users" class="formtastic user" data-validate="true" id="user_new" method="post" novalidate="novalidate"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="kQid^%&^%jhgdsjhgfxmw4=" /> 
       <input data-validate="true" id="user_email" input_html="{:autofocus=&gt;true}" name="user[email]" placeholder="[email protected]" size="30" type="text" /> 
       <input label="Submit" name="commit" type="submit" value="Sign Me Up!" /> 
</form><script>window['user_new'] = {"type":"Formtastic::FormBuilder","inline_error_class":"inline-errors","validators":{"user[email]":{"presence":{"message":"can't be blank"},"uniqueness":{"message":"has already been taken","case_sensitive":false},"format":{"message":"is invalid","with":/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,"allow_blank":true}}}};</script>    </div> 

Datos 3:

Así es como mi application.js Apariencia:

//= require jquery 
//= require jquery_ujs 
//= require rails.validations 
//= require_tree . 

Y en mi application.html.erb archivo de diseño Sólo tengo una llamada a JS application.js

Editar 4:

pensé que podría haber sido una situación en la que la secuencia de comandos generada por JS client_side_validation no está reconociendo la entrada porque el id es user_email y no user[email]. Así que cambié el id por la entrada a user[email] y eso no lo resolvió.

Alguien tiene alguna idea?

+0

¿Se puede cargar la página web utilizando el Firebug o inspector web y post aquí el error si uno? Puede ser el código js que no se ejecuta correctamente. –

+0

También intente leer la respuesta de la llamada AJAX (habilite el registro de Solicitud/Respuestas en su herramienta de depuración preferida). También puede ser que la respuesta del controlador cambie en la producción, pero es más probable que sea un problema js, no uno de respaldo. –

+0

@lexor No pude encontrar nada fuera de lo común, pero no uso Firebug demasiado, así que me puede estar perdiendo algo. Aquí hay una versión de producción: http://falling-sunset-7904.herokuapp.com/ Si escribe 'abc' y tab out, en producción debería ver 'no es válido'. En Firebug, veo que se está cargando la información de jQuery ... así que ... no estoy seguro de lo que está pasando. – marcamillion

Respuesta

Cuestiones relacionadas