ユーザーのサブスクリプションが設定されていない場合、次の 2 つのコード スニペットは同等ですか。
user.subscription.nil?
と
user.subscription
モデル内: サブスクリプション
belongs_to :user
ユーザー
has_one :subscription
ユーザーのサブスクリプションが設定されていない場合、次の 2 つのコード スニペットは同等ですか。
user.subscription.nil?
と
user.subscription
モデル内: サブスクリプション
belongs_to :user
ユーザー
has_one :subscription
ユーザーモデルでは、
has_one :subscription
サブスクリプションモデルでは、
belongs_to :user
ここでは、ユーザーとサブスクリプション テーブルの間の関連付けが定義されています。つまり、1 対 1 です。
したがって、レールでは、レコードをオブジェクトとして扱います。SOユーザーレコードを取得したら、その関連オブジェクトを取得できます。この場合user
は User クラスのオブジェクトです。したがって、と等しい をuser.subscription
含むサブスクリプション クラスのオブジェクトを返します。user_id
user.id
また、場合によっては、ユーザーのサブスクリプションがありません。そのため、続行する前に確認する必要があります。そのため、user.subscription.nil?
oruser.subscription.blank?
またはを使用していuser.subscription.present?
ます。これらはブール値を返します。
ここで、ユーザーがサブスクリプションを持っている場合は をuser.subscription.nil?
返しfalse
、ユーザーがサブスクリプションを持っていない場合は を返しますtrue
。
両者は異なるだけでなく、ほとんど正反対です。プロパティが 以外に設定されている場合nil
、前者は を返しfalse
、後者は任意の値を返します。プロパティが に設定されている場合、nil
または設定されていない場合、前者はtrue
、後者はnil
です。2 つが同じ値を返す唯一のケースは、プロパティが に設定されている場合false
です。