簡體   English   中英

NoMethodError(未定義的方法`validate'為true:TrueClass)

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

我模型中的這條線

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

造成

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

並且在update_user期間沒有錯誤。

有語法錯誤嗎? 也許像參數這樣的東西沒有正確發送,還是其他東西?

發生此錯誤的原因是

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

所以換成

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

它會工作。

讓我知道您是否仍然面臨該問題。

unless validates選項, unless需要符號或Proc。

validates :password, 
  length: { minimum: 8 }, 
  allow_nil: true, 
  on: :create, 
  unless: Proc.new{ |model_instance| model_instance.uid.present? && model_instance.provider.present?}

該PROC語法是不是世界上最可讀的東西,所以如果你想清理這個了一下你一個符號傳遞給unless選項和定義具有相同名稱的實例方法。

class User
  include ActiveModel::Model

  validates :password, 
    length: { minimum: 8 }, 
    allow_nil: true, 
    on: :create, 
    unless: :has_uid_and_provider?

  def has_uid_and_provider?
    uid.present? && provider.present?
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM