2012-06-10 11 views
5

Das ist mein User Modell:Client Side Validierungen funktioniert nicht in der Produktion, sondern arbeitet in der Entwicklung

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'

Form:

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

Es sollte funktionieren, wenn Sie das Feld verlassen, hier ist ein Screenshot davon vor Ort arbeiten:

client_side_validation local

Aber wenn ich es in der Produktion zu tun, ist es nicht funktioniert und ich habe keine Fehler in der Protokolldatei oder in der JS-Konsole.

Edit 1:

Validierungsmeldungen werden nicht angezeigt.

In Heroku Protokolle, sehe ich, wenn ich eine "gültige E-Mail-Adresse versuchen:

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 

Aber es gefällt mir nicht eine Nachricht auf meiner Seite zeigen, wie es vor Ort der Fall ist.

Außerdem, die einzige Zeit, die ich sehe, dass HTTP-Anfrage im Protokoll ist, wenn ich versuche, eine Zeichenfolge, die eine "gültige" E-Mail-Struktur hat - wie [email protected]. Aber wenn ich etwas wie abc versuche, gibt es mir nicht die Nachricht, die ich erwarte - invalid address - noch zeigt das Protokoll nichts.

Edit 2:

Ich habe versucht, meinen lokalen Server in production mode läuft und ich das gleiche Problem wie auf Heroku sehen. Es scheint also, dass das Thema nicht mit Heroku zu tun hat - sondern eher mit der Produktion.

Dies ist der HTML-Code aus der Form in der Produktion erzeugt:

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

bearbeiten 3:

Dies ist, wie mein application.js aussieht: mein

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

Und in application.html.erb Layout-Datei Ich habe nur einen JS-Aufruf an application.js

bearbeiten 4:

ich dachte, es kann eine Situation gewesen, wo die von client_side_validation erzeugte JS Skript nicht die Eingabe erkennt, weil die ID user_email und nicht user[email] ist. Also habe ich den id für den Eingang zu user[email] geändert und das hat es nicht gelöst.

Wer hat irgendwelche Gedanken?

+0

Können Sie die Webseite laden Sie die Firebug oder Web Inspector und Post hier der Fehler, wenn man mit? Es kann der js-Code sein, der nicht richtig läuft. –

+0

Versuchen Sie auch, die Antwort des AJAX-Aufrufs zu lesen (aktivieren Sie die Protokollierung von Request/Responses in Ihrem bevorzugten Debugging-Tool). Es kann auch sein, dass sich die Controller-Antwort in der Produktion ändert, aber es ist eher ein js-Problem, kein Backend-Problem. –

+0

@lexor Ich konnte nichts Außergewöhnliches finden, aber ich benutze Firebug nicht zu viel, damit mir etwas fehlt. Hier ist eine Produktionsversion - http://falling-sunset-7904.herokuapp.com/ Wenn Sie "abc" und Tabulator eingeben, sollten Sie in der Produktion sehen "ist ungültig". In Firebug sehe ich, dass jQuery-Informationen geladen werden ... soo ... nicht sicher, was passiert. – marcamillion

Antwort

Verwandte Themen