即使未选中复选框,ActionMailer也会发送电子邮件
问题描述:
我有一个用于发布的复选框(: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"
如何解决它,使得仅在通知复选框被选中的邮件传递? 谢谢!
答
我会仔细检查params[:post][:notify]
是正在寻找的正确参数。如果这些参数总是显示出来,我会查看你的查看逻辑。另外,如果您要使用这种检查方法,请将条件更改为if。例如:
if params[:post][:notify].present?
PostMailer.notify_new(@post).deliver
end
答
你应该将所有这一切为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
属性。
这与您的动作邮件无关。您的复选框逻辑位于视图中。发送邮件的逻辑是(也应该是)在控制器中。因此,在视图中应用过滤器以仅将那些请求发布到被检查的控制器。 – shivam 2014-09-03 15:18:30
params可能会返回''“'值,这不是零。试试'.present?'而不是'.nil?' – itsnikolay 2014-09-03 15:19:10
@shivam对不起?这是在控制器中的创建方法。 – user3477051 2014-09-03 15:21:36