2010-11-04 51 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 

這有多奇怪?一旦通過此控制器代碼,@ email_blast.mail_type被更改爲「card_holder」。爲什麼會發生?第一調試回報PARAMS:我的mail_type屬性正在更新..但我不明白爲什麼?

(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"> 

而第二個:

{"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"} 

回答

2

如果你調用update_attributesparams[:email_blast][:mail_type]定義,那麼它將被重新分配。您始終可以將此參數設置爲受保護的以避免這種情況。

+0

重新分配?但是如何將它重新分配到不屬於參數的東西呢?有趣。第二個問題,我想那麼是如何設置要保護的參數? – Trip 2010-11-04 23:04:47

+0

@Trip:我想你會發現它*是*的參數。 – 2010-11-05 00:47:08

+0

那是另一個問題,不是嗎?查找'attr_protected'。 – tadman 2010-11-05 03:33:33

相關問題