【问题标题】:What's the difference between attribute.present? and attribute?attribute.present 和有什么区别?和属性?
【发布时间】:2012-08-25 04:58:42
【问题描述】:

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

如果我的方法定义为:

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

我得到的结果和原来一样:

def rsvp?
  name? && email?
end

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.2


    【解决方案1】:

    present? 返回 blank? 的反义词。它们是 Ruby 核心 Object 的 Rails 扩展。如果正在测试的值是 nil""{}false[] 等,则 .present? 将返回 false,基于​​ (Array, HashString 等...) 扩展 Object

    name?这样基于你的模型属性的方法,比如:name,实际上是通过ActiveRecord::AttributeMethods中的method_missing方法传递的,然后由ActiveModel::AttributeMethods处理,最终由@处理987654325@.

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

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2015-11-16
      • 2019-08-19
      • 2014-03-13
      相关资源
      最近更新 更多