5

これは私の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

Gemfile:

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 ローカル

しかし、本番環境で実行すると、まったく機能せず、ログ ファイルや 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_emailand notであるため、入力を認識していない状況だったのではないかと思いましたuser[email]idそのため、入力をに変更しましたが、user[email]解決しませんでした。

誰にも考えはありますか?

4

1 に答える 1

2

最も推測しやすいのは、これがアセット パイプラインを追跡していることです。その他の gem によって、アセットが正しくコンパイルされない可能性があります。

完璧な答えはありませんが、Heroku のドキュメントが役立つかもしれません: https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar

于 2012-08-31T02:18:52.247 に答える