2010-05-16 5 views
0

J'ai un modèle appelé Contact_Email. Lorsqu'un modèle de courrier électronique est envoyé via ActionMailer à un contact spécifique, dans le cadre de l'action Créer, il l'envoie via .save.Comment créer une autre action de contrôleur pour créer un objet dans des rails?

Cependant, je souhaite créer une action "ignorer" qui crée également un Contact_Email, mais n'envoie PAS d'ActionMailer et me permet de définir l'état différemment.

Je veux créer une action distincte parce que je veux que ce soit répondre à un remote_for_tag afin que je puisse avoir juste un bouton ajax indiquer qu'il a été « sautée »:

Voici ce que j'ai essayé, mais alors qu'il crée un Contact_Email, je finis par recevoir une erreur lorsque je veux revenir en arrière et voir à nouveau tous les Contacts.

def skip 
    @contact_email = ContactEmail.new 
    @contact_email.contact_id = params[:contact_id] 
    @contact_email.email_id = params[:email_id] 

    @contact_email.status = "skipped" 

    if @contact_email.save 
     flash[:notice] = "skipped email" 
     redirect_to contact_emails_url 
    end 
    end 
+2

Quelle est l'erreur? Le code que vous montrez semble bien. –

+0

Lorsque j'essaie d'afficher une liste de tous les emails qui sont "en retard", j'obtiens un "attendez 1 attribut)" ou quelque chose d'erreur. Il est corrigé lorsque je modifie le contact_email nouvellement créé et enregistre, ce qui crée un created_date et sent_date. Ensuite, l'erreur disparaît, mais je n'utilise pas ces dates ... Je suppose que je pourrais juste l'ajouter dans le contrôleur pour voir ...? – Angela

Répondre

0

Eh bien, votre code semble correct, juste quelques petites choses.

  • Vous avez pas d'autre déclaration, si votre @contact_email est pas enregistré?

  • Vous ne devez certainement PAS affecter tous les paramètres séparément. Utilisez un formulaire dans la vue pour contact_email et @contact_email = ContactEmail.new(params[:contact_email]) dans le contrôleur. Bien qu'ayant «sauté» attribué séparément est correct

  • Définissez vos itinéraires correctement. Dans ce cas map.resources :contact_emails, :member => {:skip => :post} Et tout devrait être très bien
+0

Ah je pense que cela devrait être mieux (mais la même chose) comme ceci: map.skip_email "contact_email/skip_email /: contact_id /: email_id", : controller => "contact_emails", : action => "sauter" – Angela

Questions connexes