2

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

如果我的方法定义为:

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

我得到的结果与以下结果相同:

def rsvp?
  name? && email?
end

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

4

1 回答 1

5

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

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

所以,的,它们大部分是相同的(实际上调用了某些列类型;与上面相同)blank?blank?present?,但它们并不相同,因为?后缀方法会根据列类型进行一些额外的检查。

于 2012-08-25T05:32:45.223 回答