2014-09-03 52 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属性。

相关问题