3

テンプレート new.html.erb に form_for があり、DB に通常の保存を行い、成功時に電子メールを送信します。フォームが完全に入力されるように、メーラーが本文と同じ new.html.erb を送信し、モデルを渡すようにします。次のエラーが表示されます。

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

form_for タグの直後の行 (認証トークン タグを挿入しているため)。メーラーでテンプレートを再利用できるように、これを回避する方法はありますか?

メーラーコードは次のようになります

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 に答える
0

私は家の販売ページで同じ問題を抱えていました. メールテンプレートで form_for を使用していますか? これは私の問題だったので、form_for の代わりに div を使用してビルドし、すべて正常に動作しました。

于 2013-12-11T23:44:33.193 に答える
0

このようなエラーを回避するには、template.new.html の form_for の信頼性をオフにするだけです。

Railsフォームからauthenticity_tokenを削除するにはどうすればよいです

于 2017-05-17T04:50:32.497 に答える