É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:
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="✓" /><input name="authenticity_token" type="hidden" value="kQid^%&^%jhgdsjhgfxmw4=" />
<input data-validate="true" id="user_email" input_html="{:autofocus=>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?
¿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. –
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. –
@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