0

これはデバイスのエラーである場合とそうでない場合がありますが、そうであると思います。

テストでは、電子メール アドレスとして整数を割り当ててみました。アクティブなレコード保存の「腸」からこのエラーが発生しています:

=> #<NoMethodError: undefined method `downcase!' for 1:Fixnum>

これは、User < ActiveRecord::Base.

validates :email, format: { with: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i, message: "Invalid email"}

どういうわけか、何らかのデバイス検証またはその他のフックが電子メールアドレスで呼び出されて爆発していると推測しています。次に何を試すことができますか?

4

1 に答える 1

1

Devise のソースコードを見てみましょう:

このモジュールは、次のことを行う をauthenticable追加します。before_validation :downcase_keys

def downcase_keys
    self.class.case_insensitive_keys.each { |k| apply_to_attribute_or_variable(k, :downcase!) }
end

(参照用にlib/devise/models/authenticatable.rbを参照してください)

モデルにロジックを適用する前に、大文字と小文字を区別しないすべてのキーをダウンケースするために使用されます。Devise が提供するデフォルト設定では、で設定するフィールドがcase_insensitive_keys含まれています。emailFixnum

# Keys that should be case-insensitive.
mattr_accessor :case_insensitive_keys
@@case_insensitive_keys = [ :email ]

(参照用にlib/devise.rbを参照してください)

このようにして、独自の検証がチェックされる前でも検証が実行されます。おそらく、変数の型の追加の検証を Devise に追加することができますが、デフォルトではString、ログインなどのフォームによって提供される のみをそのフィールドに割り当てます。

これを少し明確にすることができれば幸いです。

于 2013-02-23T11:08:22.817 に答える