我收到以下错误:'未定义的方法`有效吗?'为零:NilClass'
当我试着打电话
@user.subscription.active?
因为有时订阅尚未创建。然后我写了一个方法来检查用户是否有一个现有的有效订阅:
def active_subscription?
if !self.subscription.nil?
if self.subscription.active?
return true
else
return false
end
else
return false
end
end
有没有更好的方法来编写这个active_subscription?没有所有if else检查和/或返回语句的方法?
以下是订阅模型中检查订阅状态是否有效的方法
def active?
status == 'active'
end
答案 0 :(得分:8)
这应该没问题:
def active_subscription?
subscription && subscription.active?
end
甚至更短:
def active_subscription?
subscription.try(:active?)
end
要确保此方法可以返回的唯一值是true
和false
,您可以:
def active_subscription?
!!subscription.try(:active?)
end
答案 1 :(得分:5)
您可以使用delegate
:
class User < ActiveRecord::Base
has_one :subscription
delegate :active?, to: :subscription, prefix: :subscription, allow_nil: true
# ...
end
现在你可以打电话了
user.subscription_active?
如果订阅可用,则返回subscription.active?
(即true
或false
),如果缺少关联,则返回nil
。
答案 2 :(得分:1)
def active_subscription?
subscription && subscription.active?
end
答案 3 :(得分:1)
使用安全导航,您可以使用@user.subscription&.active
在调用方法之前检查nil。
答案 4 :(得分:0)
你可以这样做
@user.subscription.active? if @user.subscription.present?