重复使用form_for伪造邮件错误

时间:2010-07-29 16:00:59

标签: ruby-on-rails-3 actionmailer actionview form-helpers

我在模板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 个答案:

答案 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