3

我在模板 new.html.erb 中有一个 form_for,我在其中正常保存到数据库,然后成功发送电子邮件。我希望邮件程序发送与正文相同的 new.html.erb 并传递模型,以便完全填充表单。我收到以下错误:

undefined method `protect_against_forgery?' for #<#<Class:0x000000049d7110>:0x000000049d4690>

在 form_for 标记之后的那一行(因为我认为它正在注入 auth 令牌标记)。有没有办法可以规避这个问题,以便我可以在邮件程序中重复使用模板?

这是邮件程序代码的样子

class MaintenanceMailer < ActionMailer::Base
  helper :application  

  def request_email(maintenance)
    mail :to => maintenance.community.email, :subject => "Maintenance" do |format|
      format.html { render :layout => 'default', :template => 'maintenance/new' }
    end    
  end
end  
4

4 回答 4

6

将此添加到仅您的邮件模板使用的帮助程序中:

    def protect_against_forgery?
      false
    end

但请确保接收控制器跳过 verify_authenticity_token,并且会话劫持对于该表单携带的任何内容都是可以的。

于 2010-07-29T16:19:42.313 回答
4

我使用了 Sam C 建议的方法,但稍作调整。就在将渲染调用为字符串之前,我重写了该方法。

ApplicationHelper.send(:define_method, :protect_against_forgery?) { false }
html = render_to_string(template: "quotations/show", layout: "application_print")

这会覆盖protect_against_forgery?方法暂时。

于 2013-08-21T20:46:27.560 回答
0

我在房屋销售页面工作时遇到了同样的问题。您在电子邮件模板中使用 form_for 吗?因为这是我的麻烦,所以我使用 div 而不是 form_for 构建了它,并且一切正常。

于 2013-12-11T23:44:33.193 回答
0

您可以在 template.new.html 中关闭 form_for 的真实性以避免此类错误

您可以查看 如何从 Rails 表单中删除authentity_token

于 2017-05-17T04:50:32.497 回答