属性.存在之间有什么区别?和属性?



我正在学习Rails,我正在开发一个非常基本的RSVP应用程序,如果用户同时输入了名称和电子邮件地址,我的用户模型中一个名为rsvp?的方法将返回true

如果我的方法定义为:

def rsvp?
  name.present? && email.present?
end

我得到的结果和以前一样:

def rsvp?
  name? && email?
end

所以说name.present?name?相同,我被告知name.present?不仅会检查nil值,还会检查空字符串值。但name?似乎完成了同样的事情(测试了名称和电子邮件、名称但没有电子邮件等的所有四种排列)

present?返回与blank?相反的值。它们是Ruby核心Object的Rails扩展。如果正在测试的值是nil""{}false[]等…,则.present?将返回false。基于扩展Object的类型ArrayHashString等…)

基于:name等模型属性的name?等方法实际上是通过ActiveRecord::AttributeMethods中的method_missing方法传递的,然后由ActiveModel::AttributeMethods处理,最终由此类处理。

因此,它们基本上是相同的(对于某些列类型,实际上调用了blank?;与上面present?中的blank?相同),但它们并不完全相同,因为?后缀方法会根据列类型进行一些额外的检查。

最新更新