如果未设置用户订阅,这两个代码片段是否等效:
user.subscription.nil?
和
user.subscription
在模型中:订阅
belongs_to :user
用户
has_one :subscription
如果未设置用户订阅,这两个代码片段是否等效:
user.subscription.nil?
和
user.subscription
在模型中:订阅
belongs_to :user
用户
has_one :subscription
如果要检查关联是否存在,这些是等效的:
user.subscription.nil? # true if missing, false otherwise
user.subscription.blank? # true if missing, false otherwise
!user.subscription # true if missing, false otherwise
如果你想检查关联是否存在,这些是等价的(就真假而言):
user.subscription.present? # true if present, false otherwise
user.subscription # subscription if present, nil otherwise
!!user.subscription # true if present, false otherwise
它们不仅不同,而且几乎相反。如果该属性设置为除 之外的任何值nil
,则前者将返回false
,而后者将返回任何值。如果属性设置为nil
或未设置,则前者为true
,后者为nil
。两者返回相同值的唯一情况是属性设置为false
.
在用户模型中,
has_one :subscription
在订阅模型中,
belongs_to :user
这里已经定义了用户和订阅表之间的关联,即一对一。
所以在 Rails 中,我们将记录作为对象处理。所以一旦你有了用户记录,你就可以得到它的关联对象。在这种情况下user
是用户类的对象。所以user.subscription
返回包含user_id
等于的订阅类的对象user.id
。
在某些情况下,用户没有订阅。因此,我们需要在继续之前进行检查。这就是我们使用user.subscription.nil?
or user.subscription.blank?
or的原因user.subscription.present?
。这些返回布尔值。
在这里,如果用户有订阅,则user.subscription.nil?
返回false
,如果用户没有订阅,则返回true
。