我正在学习Rails,我正在开发一个非常基本的RSVP应用程序,如果用户同时输入了名称和电子邮件地址,我的用户模型中的rsvp?
方法会返回{{ 1}}。
如果我的方法定义为:
true
我得到的结果与以下相同:
def rsvp?
name.present? && email.present?
end
所以说def rsvp?
name? && email?
end
与name.present?
相同我被告知name?
不仅会检查name.present?
值,还会检查空字符串值。但似乎nil
完成了同样的事情(测试了所有四种名称和电子邮件的排列,名称但没有电子邮件等)。
答案 0 :(得分:5)
present?
返回blank?
的反面。它们是Ruby核心Object
的Rails扩展。如果正在测试的值为.present?
,false
,nil
,""
,{}
等,false
将返回[]
。 ..基于类型(Array
,Hash
,String
等等......)扩展Object
。
基于name?
模型属性的:name
等方法实际上是通过ActiveRecord::AttributeMethods
中的method_missing
方法传递的,然后由{{1}处理最终由 this class 处理。
所以,是它们大多是相同的(对于某些列类型ActiveModel::AttributeMethods
实际上是被调用的;上面blank?
中的blank?
相同,但它们不是相同,因为present?
后缀方法会根据列类型进行一些额外的检查。