2010-07-31 3 views
1

Avez-SubscriberListRuby si Model.exists?

Quand une commande est passée, je veux vérifier si l'email du nouvel utilisateur est tout à fait prêt dans notre liste d'abonnés.

Si ce n'est pas le cas, ajoutez-les. Le problème est qu'il les ajoute n'importe quoi. Je suppose qu'il ne fonctionne pas correctement.

Actuellement mon orders_controller je

unless logged_in? 
    @order.subscribe_after_purchase(@order.user.email) 
end 

Et dans mon Order.rb je

def subscribe_after_purchase(email) 
    unless SubscriberList.exists?(email) 
    SubscriberList.create(:email => email) 
    end 
end 

Répondre

2

Essayez d'utiliser:

unless SubscriberList.exists?(:email => email) 
    SubscriberList.create(:email => email) 
end 

Lorsque vous passez juste l'adresse e-mail à La méthode exists? puis ActiveRecord l'interprétera comme une clé primaire. Vous pouvez également utiliser:

SubscriberList.find_or_create_by_email(email) 

— qui aura le même effet que votre bloc unless; créer l'enregistrement sauf s'il existe déjà.

+1

œuvres find_or_create_by_email, ont oublié ce que cela fonctionne aussi. Vous où droit, besoin d'ajouter le: email => email. Mais pour une raison quelconque, le bloc «à moins» n'a pas fonctionné dans mon modèle. Je l'ai changé en "si" et mis le code dans la section "else" et il a commencé à travailler. – pcasa

Questions connexes