2012-06-10 4 views
5

Questo è il mio modello User:lato client convalide non funziona in produzione, ma funziona in fase di sviluppo

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 %> 

Dovrebbe funzionare quando si esce dal campo, ecco uno screenshot di esso lavoro a livello locale:

client_side_validation local

Ma quando lo faccio in produzione, non funziona affatto e non vedere eventuali errori nel file di log o nella console JS.

Edit 1:

messaggi di convalida non vengono visualizzati.

in ceppi Heroku, vedo questo ogni volta che provo un indirizzo di posta elettronica 'valida':

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 

Ma non mi mostra un messaggio sulla mia pagina come fa a livello locale.

Inoltre, l'unica volta che vedo la richiesta HTTP nel registro è quando provo una stringa che ha una struttura di posta elettronica "valida" - come [email protected]. Ma se provo qualcosa come abc non mi dà il messaggio che mi aspetto - invalid address - né il registro mostra nulla.

Edit 2:

Ho provato a fare funzionare il mio server locale in production mode e sto vedendo lo stesso problema su Heroku. Quindi sembra che il problema non abbia nulla a che fare con Heroku - ma piuttosto la produzione.

Questa è l'HTML generato dalla forma nella produzione:

<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> 

Edit 3:

Ecco come il mio application.js sguardi:

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

E nel mio File di layout application.html.erb Ho appena una chiamata JS a application.js

Edit 4:

ho pensato che potrebbe essere stato una situazione in cui lo script JS generato da client_side_validation non riconosce l'ingresso perché l'ID è user_email e non user[email]. Così ho modificato il id per l'input su user[email] e questo non lo ha risolto.

Qualcuno ha qualche idea?

+0

Puoi caricare la pagina web utilizzando il Firebug o Web Inspector e post qui l'errore se uno? Potrebbe essere il codice js che non funziona correttamente. –

+0

Prova anche a leggere la risposta della chiamata AJAX (abilita la registrazione di Richiesta/Risposte nel tuo strumento di debug preferito). Potrebbe anche essere la risposta del controller cambiare nella produzione, ma è più probabile che sia un problema js, non un back-end. –

+0

@lexor Non sono riuscito a trovare nulla fuori dall'ordinario, ma non uso troppo Firebug, quindi potrei mancare qualcosa. Ecco una versione di produzione: http://falling-sunset-7904.herokuapp.com/ Se si digita 'abc' e si esce, in produzione si dovrebbe vedere 'non valido'. In Firebug, vedo che le informazioni di jQuery vengono caricate ... quindi ... non sono sicuro di cosa stia succedendo. – marcamillion

risposta