Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 即使未选中复选框,ActionMailer也会发送电子邮件_Ruby On Rails_Actionmailer - Fatal编程技术网

Ruby on rails 即使未选中复选框,ActionMailer也会发送电子邮件

Ruby on rails 即使未选中复选框,ActionMailer也会发送电子邮件,ruby-on-rails,actionmailer,Ruby On Rails,Actionmailer,我的帖子有一个复选框(:notify),我想在创建新帖子时发送电子邮件,但前提是选中了该复选框。然而,ActionMailer正在发送电子邮件,即使它没有被检查。以下是代码片段: if @post.save unless params[:post][:notify].nil? PostMailer.notify_new(@post).deliver end ......... .............. 表格: 我如何修复它,使电子邮件仅在选中“通知”复选框时发送?

我的帖子有一个复选框(:notify),我想在创建新帖子时发送电子邮件,但前提是选中了该复选框。然而,ActionMailer正在发送电子邮件,即使它没有被检查。以下是代码片段:

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

我如何修复它,使电子邮件仅在选中“通知”复选框时发送?
谢谢

我会再次检查
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将被视为布尔值。不要忘记在控制器中允许
:notify
属性。

这与操作邮件程序无关。您的复选框逻辑在视图中。发送邮件逻辑在控制器中(并且应该在控制器中)。因此,在视图中应用筛选器,仅将那些已检查的请求发布到控制器。参数可以返回
值,该值不是零。请尝试
.present?
而不是
.nil?
@shivam对不起?这是在控制器中,在create方法中。@itsnikolay我试过了。现在呢?同样,它也不起作用。@user3477051您想给我们看一下您的表单吗?更有可能的是,这就是问题所在。
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