我正在学习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?falsenil""{}false[]Array等,则Hash将返回String。基于扩展的类型(Objectname?:name等)。
基于模型属性的方法如method_missing实际上通过ActiveRecord::AttributeMethods中的ActiveModel::AttributeMethods方法,然后由blank?处理,最后由this class处理。
所以,是的,它们基本上是相同的(对于某些列类型,blank?实际上是被调用的;present?上面的?中的是相同的),但是它们并不相同,因为后缀方法根据列类型做一些额外的检查。

关于ruby-on-rails - attribute.present和有什么不一样?和属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12119289/

10-11 17:38