NoMethodError(未定义的方法`validate' for true:TrueClass)

时间:2017-02-23 18:33:23

标签: ruby-on-rails validation activerecord

我的模型中的这一特定行

validates :password, 
     length: { minimum: 8 }, 
     allow_nil: true, 
     on: :create, 
     unless: (:uid.present? && :provider.present?)

导致

NoMethodError (undefined method `validate' for true:TrueClass)

并且在update_user期间没有错误。

是否存在任何语法错误?或许类似参数未正确发送或是其他内容?

2 个答案:

答案 0 :(得分:3)

这个错误正在发生,因为

unless: (:uid.present? && :provider.present?)

所以用

替换它
unless: Proc.new{|u| u.uid.present? && u.provider.present?}

它会起作用。

如果您仍然面临这个问题,请告诉我。

答案 1 :(得分:3)

unless的{​​{1}}选项需要符号或过程

validates

Proc语法不是世界上最具可读性的东西,所以如果你想稍微清理一下,你可以将符号传递给validates :password, length: { minimum: 8 }, allow_nil: true, on: :create, unless: Proc.new{ |model_instance| model_instance.uid.present? && model_instance.provider.present?} 选项并定义一个实例方法同名。

unless