0

ユーザーのサブスクリプションが設定されていない場合、次の 2 つのコード スニペットは同等ですか。

user.subscription.nil?

user.subscription

モデル内: サブスクリプション

belongs_to :user

ユーザー

has_one :subscription
4

3 に答える 3

1

ユーザーモデルでは、

has_one :subscription

サブスクリプションモデルでは、

belongs_to :user

ここでは、ユーザーとサブスクリプション テーブルの間の関連付けが定義されています。つまり、1 対 1 です。

したがって、レールでは、レコードをオブジェクトとして扱います。SOユーザーレコードを取得したら、その関連オブジェクトを取得できます。この場合userは User クラスのオブジェクトです。したがって、と等しい をuser.subscription含むサブスクリプション クラスのオブジェクトを返します。user_iduser.id

また、場合によっては、ユーザーのサブスクリプションがありません。そのため、続行する前に確認する必要があります。そのため、user.subscription.nil?oruser.subscription.blank?またはを使用していuser.subscription.present?ます。これらはブール値を返します。

ここで、ユーザーがサブスクリプションを持っている場合は をuser.subscription.nil?返しfalse、ユーザーがサブスクリプションを持っていない場合は を返しますtrue

于 2013-09-11T09:36:42.340 に答える
1

両者は異なるだけでなく、ほとんど正反対です。プロパティが 以外に設定されている場合nil、前者は を返しfalse、後者は任意の値を返します。プロパティが に設定されている場合、nilまたは設定されていない場合、前者はtrue、後者はnilです。2 つが同じ値を返す唯一のケースは、プロパティが に設定されている場合falseです。

于 2013-09-11T09:25:44.780 に答える