2

Railsを学んでいて、非常に基本的なRSVPアプリに取り組んでいます。このアプリでは、ユーザーが名前と電子メールアドレスの両方を入力するとrsvp?、ユーザーモデルで呼び出されたメソッドがを返しますtrue

私のメソッドが次のように定義されている場合:

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

次の場合と同じ結果が得られます。

def rsvp?
  name? && email?
end

つまり、値だけでなく、空の文字列値もチェックする と言われname.present?たのと同じことです。しかし、同じことを達成しているようです(名前と電子メールの4つの順列すべてをテストしましたが、電子メールはテストしていません)。name?name.present?nilname?

4

1 に答える 1

5

present?の反対を返しますblank?。これらは Ruby のコアの Rails 拡張ですObject。は、テストされている値が、、、、、などである場合に(、、など...)基づいて.present?返されます。falsenil""{}false[]ArrayHashStringObject

name?のようなモデルの属性に基づくメソッド:nameは、実際にはこのクラスによって処理され、最終的にはこのクラスmethod_missingによって処理されるメソッドを介して渡されます。ActiveRecord::AttributeMethodsActiveModel::AttributeMethods

したがって、はい、それらはほとんど同じです (特定の列タイプblank?が実際に呼び出されるためblank?present?上記と同じ)が、接尾辞メソッドが列タイプに基づいて追加のチェックを行うため、それらは同一ではありません。?

于 2012-08-25T05:32:45.223 に答える