gra*_*ury 2 ruby refactoring ruby-on-rails
我收到以下错误:'未定义的方法`有效吗?' 为零:NilClass'
当我试着打电话
@user.subscription.active?
Run Code Online (Sandbox Code Playgroud)
因为有时订阅尚未创建.然后我写了一个方法来检查用户是否有一个现有的有效订阅:
def active_subscription?
if !self.subscription.nil?
if self.subscription.active?
return true
else
return false
end
else
return false
end
end
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来编写这个active_subscription?没有所有if else检查和/或返回语句的方法?
以下是订阅模型中检查订阅状态是否处于活动状态的方法
def active?
status == 'active'
end
Run Code Online (Sandbox Code Playgroud)
这应该没问题:
def active_subscription?
subscription && subscription.active?
end
Run Code Online (Sandbox Code Playgroud)
甚至更短:
def active_subscription?
subscription.try(:active?)
end
Run Code Online (Sandbox Code Playgroud)
为确保只值这个方法可以返回的true和false,您可以:
def active_subscription?
!!subscription.try(:active?)
end
Run Code Online (Sandbox Code Playgroud)
你可以使用delegate:
class User < ActiveRecord::Base
has_one :subscription
delegate :active?, to: :subscription, prefix: :subscription, allow_nil: true
# ...
end
Run Code Online (Sandbox Code Playgroud)
现在你可以打电话了
user.subscription_active?
Run Code Online (Sandbox Code Playgroud)
如果订阅可用且缺少关联,则返回subscription.active?(即true或false)nil.
| 归档时间: |
|
| 查看次数: |
1836 次 |
| 最近记录: |