Đây là mô hình User
tôi:Client Side validations không hoạt động trong sản xuất, nhưng hoạt động trong phát triển
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'
Mẫu:
<%= 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 %>
Nó sẽ hoạt động khi bạn thoát ra khỏi lĩnh vực này, đây là một ảnh chụp màn hình của nó làm việc tại địa phương:
Nhưng khi tôi làm điều đó trong sản xuất, nó không hoạt động ở tất cả và tôi không thấy bất kỳ lỗi nào trong file log hoặc trong giao diện điều khiển JS.
Sửa 1:
điệp Validation không hiển thị lên.
Trong bản ghi Heroku, tôi thấy điều này bất cứ khi nào tôi thử một địa chỉ 'hợp lệ' email:
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
Nhưng nó không chỉ cho tôi một tin nhắn trên trang của tôi như nó tại địa phương.
Ngoài ra, lần duy nhất tôi thấy yêu cầu HTTP trong nhật ký là khi tôi thử một chuỗi có cấu trúc email 'hợp lệ' - như [email protected]
. Nhưng nếu tôi thử một cái gì đó như abc
nó không cho tôi thông báo tôi mong đợi - invalid address
- cũng như nhật ký không hiển thị bất cứ điều gì.
Chỉnh sửa 2:
Tôi đã cố gắng chạy máy chủ địa phương của tôi trong production mode
và tôi đang nhìn thấy những vấn đề tương tự như trên Heroku. Vì vậy, có vẻ như vấn đề có thể không liên quan gì đến Heroku - mà là sản xuất.
Đây là HTML được tạo từ mẫu trong sản xuất:
<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>
Sửa 3:
Đây là cách application.js tôi trông:
//= require jquery
//= require jquery_ujs
//= require rails.validations
//= require_tree .
Và trong tôi application.html.erb
tệp bố cục Tôi chỉ có một cuộc gọi JS đến application.js
Sửa 4:
tôi nghĩ rằng nó có thể là một tình huống mà kịch bản được tạo ra bởi JS client_side_validation
không nhận ra đầu vào vì id là user_email
và không user[email]
. Vì vậy, tôi đã thay đổi id
cho đầu vào thành user[email]
và điều đó không giải quyết được.
Mọi người đều có bất kỳ suy nghĩ nào?
Bạn có thể tải các trang web bằng cách sử dụng Firebug hoặc Web Inspector và sau đây lỗi nếu một? Nó có thể là mã js không chạy đúng cách. –
Đồng thời thử đọc phản hồi của cuộc gọi AJAX (cho phép ghi nhật ký Yêu cầu/Phản hồi trong công cụ gỡ lỗi ưa thích của bạn). Nó cũng có thể là phản ứng điều khiển thay đổi trong sản xuất, nhưng nó có nhiều khả năng là một vấn đề js, không phải là một phụ trợ. –
@lexor Tôi không thể tìm thấy bất cứ điều gì trong số bình thường, nhưng tôi không sử dụng Firebug quá nhiều, vì vậy tôi có thể thiếu một cái gì đó. Đây là một phiên bản sản xuất - http://falling-sunset-7904.herokuapp.com/ Nếu bạn gõ vào 'abc' và tab out, trong quá trình sản xuất bạn sẽ thấy 'không hợp lệ'. Trong Firebug, tôi thấy rằng thông tin jQuery đang được tải ... soo ... không chắc chắn những gì đang xảy ra. – marcamillion