2014-07-14 3 views
1

J'ai une NoMethodError undefined method `where' for <Subscription:0x000001083aee00>. Il pointe vers le modèle mon utilisateur sur la ligne subscription.where(cancelled: nil).exists?.NoMethodError méthode non définie `où '

Dans les vues, j'essaie de configurer une instruction if pour pouvoir afficher le contenu sélectionné aux utilisateurs dont le statut d'annulation dans la table Abonnements n'est pas nul.

modèle utilisateur:

has_one :subscription 

    def paid? 
     subscription.where(cancelled: nil).exists? 
    end 

La relation était has_one depuis le début pour d'autres parties de l'application. Quand j'ajoute une relation belongs_to je reçois l'erreur undefined method `where' for nil:NilClass

+0

Quelle version de rails utilisez-vous? – dax

+0

@dax J'ai Rails 4 – xps15z

Répondre

3

si l'abonnement est un attribut de l'utilisateur et en cas d'annulation est un attribut booléen d'abonnement que vous pouvez faire ...

def paid? 
    !subscription.cancelled? if subscription 
end 

where peut être utilisé que si il existe une relation un-à-plusieurs entre l'utilisateur et les abonnements, ou il peut être utilisé sur la classe d'abonnement elle-même.

subscription.cancelled? retournera vrai s'il est annulé faux s'il n'est pas ainsi préfixé du symbole "non" comme dans !subscription.cancelled? retournera vrai s'il n'est pas annulé.

La raison de la fin ... if subscription gère le cas de non-abonnement présent pour l'utilisateur, auquel cas faux (nil) sera retourné.

+0

Merci pour les conseils! – xps15z

Questions connexes