2014-09-03 23 views
0

我有一個用於發佈的複選框(:notify),並且我想在創建新帖子時發送電子郵件,僅當它被選中時才發送。但是,即使未檢查,ActionMailer也會發送電子郵件。以下是代碼片段:即使未選中複選框,ActionMailer也會發送電子郵件

if @post.save 
    unless params[:post][:notify].nil? 
    PostMailer.notify_new(@post).deliver 
    end 
    ......... 
    .............. 

形式:

= bootstrap_form_for @post, remote: true do |f| 
    = f.text_area :body 
    = f.check_box :notify, label: "" 
    = f.submit "Send", class: "button" 

如何解決它,使得僅在通知複選框被選中的郵件傳遞? 謝謝!

+0

這與您的動作郵件無關。您的複選框邏輯位於視圖中。發送郵件的邏輯是(也應該是)在控制器中。因此,在視圖中應用過濾器以僅將那些請求發佈到被檢查的控制器。 – shivam 2014-09-03 15:18:30

+0

params可能會返回''「'值,這不是零。試試'.present?'而不是'.nil?' – itsnikolay 2014-09-03 15:19:10

+0

@shivam對不起?這是在控制器中的創建方法。 – user3477051 2014-09-03 15:21:36

回答

0

我會仔細檢查params[:post][:notify]是正在尋找的正確參數。如果這些參數總是顯示出來,我會查看你的查看邏輯。另外,如果您要使用這種檢查方法,請將條件更改爲if。例如:

if params[:post][:notify].present? 
    PostMailer.notify_new(@post).deliver 
end 
1

你應該將所有這一切爲Post模型...

class Post 
    attr_accessor_with_default :notify, false 
    after_create :deliver, :if => Proc.new {|p| p.notify} 

    def deliver 
    PostMailer.notify_new(self).deliver 
    end 
end 

然後,通知將被視爲一個布爾值。不要忘記在控制器中允許:notify屬性。

相關問題