attribute.present有什么区别?和属性?

时间:2012-08-25 04:58:42

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

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

如果我的方法定义为:

true

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

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

所以说def rsvp? name? && email? end name.present?相同我被告知name?不仅会检查name.present?值,还会检查空字符串值。但似乎nil完成了同样的事情(测试了所有四种名称和电子邮件的排列,名称但没有电子邮件等)。

1 个答案:

答案 0 :(得分:5)

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

基于name?模型属性的:name等方法实际上是通过ActiveRecord::AttributeMethods中的method_missing方法传递的,然后由{{1}处理最终由 this class 处理。

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