dre*_*879 2 ruby ruby-on-rails ruby-on-rails-3.2
我正在学习Rails,我正在开发一个非常基本的RSVP应用程序,如果用户同时输入了名称和电子邮件地址,rsvp?我的用户模型中调用的方法将返回true.
如果我的方法定义为:
def rsvp?
name.present? && email.present?
end
Run Code Online (Sandbox Code Playgroud)
我得到的结果与以下相同:
def rsvp?
name? && email?
end
Run Code Online (Sandbox Code Playgroud)
所以说name.present?的与name? 我被告知的一样,name.present?不仅会检查nil值,还会检查空字符串值.但似乎name?完成了同样的事情(测试了所有四种名称和电子邮件的排列,名称但没有电子邮件等)
present?返回相反的blank?.它们是Ruby核心的Rails扩展Object..present?将返回false如果值是测试nil,"",{},false,[],等...根据类型(Array,Hash,String,等...)延伸Object.
类似的方法name?是基于模型一样的属性,:name通过实际传递method_missing方法,ActiveRecord::AttributeMethods然后由处理ActiveModel::AttributeMethods并最终由处理这个类.
所以,是的,他们大多是相同的(对某些列类型blank?实际上是所谓的;同样blank?在present?上面),但他们不是相同的,作为?后缀的方法做基于列类型的一些额外的检查.
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |