ruby-on-rails-3 - 客户端验证在生产中不起作用,但在开发中起作用

标签 ruby-on-rails-3 heroku devise client-side-validation

这是我的 User模型:

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

gem 文件:
gem 'client_side_validations'
形式:
<%= 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 => "your-email@address.com", :input_html => {:autofocus => true}, :validate => true %>
              <%= f.submit :label => "Submit", :value => "Sign Me Up!"  %>
      <div class="ajax-response"><%= devise_error_messages! %></div>
          <% end %>

当您退出该字段时它应该可以工作,这是它在本地工作的屏幕截图:

client_side_validation local

但是当我在生产中这样做时,它根本不起作用,我在日志文件或 JS 控制台中没有看到任何错误。

编辑 1:

验证消息未显示。

在 Heroku 日志中,每当我尝试使用“有效”电子邮件地址时,都会看到这一点:
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

但它不会像本地那样在我的页面上向我显示消息。

此外,我在日志中看到 HTTP 请求的唯一时间是当我尝试具有“有效”电子邮件结构的字符串时 - 如 abc@email.com .但如果我尝试类似 abc它没有给我我期望的信息 - invalid address - 日志也不显示任何内容。

编辑 2:

我尝试在 production mode 中运行我的本地服务器我看到了与 Heroku 相同的问题。所以看起来这个问题可能与 Heroku 无关 - 而与生产有关。

这是从生产中的表单生成的 HTML:
<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="your-email@address.com" 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>

编辑 3:

这是我的 application.js 的样子:
//= require jquery
//= require jquery_ujs
//= require rails.validations
//= require_tree .

而在我的 application.html.erb布局文件我只有一个对 application.js 的 JS 调用

编辑 4:

我想可能是client_side_validation生成的JS脚本的情况无法识别输入,因为 ID 是 user_email而不是 user[email] .所以我改了id对于 user[email] 的输入这并没有解决它。

有人有什么想法吗?

最佳答案

最好的猜测是这会跟踪 Assets 管道。其他一些 gem 可能会阻止 Assets 正确编译。

我没有给你一个完美的答案,但 Heroku 文档在这里可能会有所帮助:
https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar

关于ruby-on-rails-3 - 客户端验证在生产中不起作用,但在开发中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965501/

相关文章:

ruby-on-rails-3 - 在完整的 Rails 引擎中从 lib 文件夹加载路由

ruby-on-rails - Rails 3,回形针 + S3 - 如何存储实例并保护访问

ruby-on-rails - 使用 Ruby on Rails API 和 React 通过 Google 登录

ruby-on-rails - accepts_nested_attributes_for 和belongs_to 多态设计

ruby-on-rails-3 - 对于 Rails 的非经常性计费,您会使用什么?

ruby-on-rails - Factory Girl after_build 回调并覆盖 rspec 中的问题

django - 在 Heroku 上运行 Django 和 Neo4j

heroku - 如何将自定义域指向 Heroku 子域?

ssl - 如何在 Heroku 上禁用 HTTPS

ruby-on-rails - 从 Rails 控制台删除用户记录