我正在学习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扩展。如果测试值为.present?
、false
、nil
、""
、{}
、false
、[]
、Array
等,则Hash
将返回String
。基于扩展的类型(Object
、name?
、:name
等)。
基于模型属性的方法如method_missing
实际上通过ActiveRecord::AttributeMethods
中的ActiveModel::AttributeMethods
方法,然后由blank?
处理,最后由this class处理。
所以,是的,它们基本上是相同的(对于某些列类型,blank?
实际上是被调用的;present?
上面的?
中的是相同的),但是它们并不相同,因为后缀方法根据列类型做一些额外的检查。
关于ruby-on-rails - attribute.present和有什么不一样?和属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12119289/