Повторное использование form_for для почтовой ошибки при подделке - PullRequest
3 голосов
/ 29 июля 2010

У меня есть form_for в шаблоне new.html.erb, где я делаю обычное сохранение в БД, а затем по электронной почте в случае успеха.Я хочу, чтобы почтовая программа отправила тот же 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 ]

6 голосов
/ 29 июля 2010

Добавьте это к помощнику, который использует только ваш шаблон почтовой программы:

    def protect_against_forgery?
      false
    end

Но убедитесь, что принимающий контроллер пропускает verify_authenticity_token и что сессионное джекинг подходит для любой формы, которую несет.

4 голосов
/ 22 августа 2013

Я использовал метод, предложенный Сэмом С, но немного его скорректировал.Непосредственно перед вызовом рендера в строку я переопределяю метод.

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

Это переопределяет protect_against_forgery?метод временно.

0 голосов
/ 17 мая 2017

вы можете просто отключить аутентификацию form_for в template.new.html, чтобы избежать таких ошибок

вы можете проверить это для Как удалить authenticity_token из форм rails

0 голосов
/ 12 декабря 2013

У меня была такая же проблема при работе на домашней странице продаж. Вы используете form_for в своем шаблоне электронной почты? Поскольку это была моя проблема, я построил ее, используя div вместо form_for, и все работало нормально.

...