我在模板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
答案 0 :(得分:6)
将此添加到只有您的邮件程序模板使用的帮助程序:
def protect_against_forgery?
false
end
但请确保接收控制器跳过verify_authenticity_token,并且该会话顶层对于该表单所包含的内容是可以的。
答案 1 :(得分:4)
我使用了Sam C建议的方法,但略微调整了它。在将render渲染为string之前,我重写了该方法。
ApplicationHelper.send(:define_method, :protect_against_forgery?) { false }
html = render_to_string(template: "quotations/show", layout: "application_print")
这会覆盖protect_against_forgery?方法暂时。
答案 2 :(得分:0)
我在房屋销售页面上遇到同样的问题。您是否在电子邮件模板中使用form_for?因为这是我的麻烦,我使用div而不是form_for构建它并且一切正常。
答案 3 :(得分:0)
您可以关闭template.new.html中form_for的真实性以避免此类错误
您可以查看此内容 How do i remove the authenticity_token from rails forms