2

次のエラーが表示されます:「undefined method `active?」for nil: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 チェックや return ステートメントをまったく使用しないメソッドですか?

サブスクリプション ステータスがアクティブかどうかをチェックするサブスクリプション モデルのメソッドを次に示します。

def active?
 status == 'active'
end
4

5 に答える 5

9

これは問題ないはずです:

def active_subscription?
  subscription && subscription.active?
end

またはさらに短い:

def active_subscription?
  subscription.try(:active?)
end

このメソッドが返すことができる唯一の値がtruefalseであることを確認するには、次のことができます。

def active_subscription?
  !!subscription.try(:active?)
end
于 2013-09-11T09:55:31.620 に答える
1
def active_subscription?
  subscription && subscription.active?
end
于 2013-09-11T09:55:14.613 に答える
0

あなたはこれを行うことができます

@user.subscription.active? if @user.subscription.present?
于 2013-09-11T09:53:58.433 に答える