2013-02-22 40 views
0

这可能是也可能不是设计错误,但我认为是。Devise:=>#<NoMethodError:未定义的方法`downcase!' for 1:Fixnum>

在测试中,我试着分配一个整数作为电子邮件地址。我从活动记录的“肠子”收到此错误节省:

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

尽管这是事实,我有这个验证我的用户<的ActiveRecord :: Base的

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

我猜某些设计验证或其他挂钩在电子邮件地址上被调用并炸毁。

有人可以对此有所了解吗?谢谢!

回答

1

看一看的设计源代码:

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仅供参考)

它是用来downcase所有在将任何逻辑应用于模型之前不区分大小写的键。默认配置由Devise提供,case_insensitive_keys包含您设置的email字段,其​​中Fixnum

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

(见lib/devise.rb仅供参考)

这样一来,验证自己的验证检查,甚至之前执行。也许可以将额外的变量类型验证添加到设计中,但默认情况下,您只会将login/etc.表单提供的String分配给该字段。

我希望我能澄清这一点。

+0

谢谢。我会称这是一个设计错误:) – pitosalas 2013-02-23 17:08:53

相关问题