2010-11-04 39 views
0
def update 
    debugger 
    @email_blast = EmailBlast.find(params[:id]) 
    if @email_blast.update_attributes(params[:email_blast]) 
     debugger 
     # changes mail_type here 
     flash[:notice] = 'Email Blast Saved.' 
     if params[:id] == "1" 
     Delayed::Job.enqueue MassEmail.new(params[:email_blast][:subject], params[:email_blast][:body]) 
     elsif params[:id] == "2" 
     Delayed::Job.enqueue OrgBlast.new(params[:email_blast][:subject], params[:email_blast][:body]) 
     elsif params[:id] == "3" 
     Delayed::Job.enqueue MagicEmail.new(params[:email_blast][:subject], params[:email_blast][:body]) 
     elsif params[:id] == "4" 
     Delayed::Job.enqueue OrgMagicEmail.new(params[:email_blast][:subject], params[:email_blast][:body]) 
     end 
     redirect_to edit_admin_email_blast_path(params[:id]) 
    end 
end 

Comme c'est étrange? Une fois ce code de contrôleur passé, @ email_blast.mail_type devient "card_holder". Pourquoi cela arriverait-il? params sur le premier retour du débogueur:Mon attribut mail_type est mis à jour .. mais je n'arrive pas à comprendre pourquoi?

(rdb:407) @email_blast = EmailBlast.find(params[:id]) 
#<EmailBlast id: 3, subject: "HQMagic Email", body: "asdfasdfasdfasdfas<br />\r\nd<br />\r\nfas<br />\r\ndf<br...", mail_type: "magic_email", created_at: "2010-10-28 14:57:48", updated_at: "2010-11-04 20:51:45"> 

Et le second:

{"body"=>"asdfasdfasdfasdfas<br />\r\nd<br />\r\nfas<br />\r\ndf<br />\r\nasdf<br />\r\nas<br />\r\ndf<br />\r\nasd<br />\r\nfasd<br />\r\nfa<br />\r\nsd<br />\r\nfasd", "mail_type"=>"card_holders", "id"=>"3", "subject"=>"HQMagic Email"} 

Répondre

2

Si vous appelez est défini update_attributes et params[:email_blast][:mail_type], alors il sera réaffecté. Vous pouvez toujours définir ce paramètre comme protégé pour éviter cela.

+0

Réaffecté? Mais comment serait-il réaffecté à quelque chose qui n'est pas dans les paramètres? Intéressant. La deuxième question que je suppose alors est de savoir comment définir le paramètre à protéger? – Trip

+0

@Trip: Je pense que vous le trouverez * est * dans les paramètres. –

+0

Eh bien c'est une autre question n'est-ce pas? Recherchez 'attr_protected'. – tadman