【问题标题】:How do I use form helpers in the mailer in rails 3?如何在 rails 3 的邮件程序中使用表单助手?
【发布时间】:2011-09-13 19:37:19
【问题描述】:

我正在尝试为用户创建一封邮件,其中包含一个简单的 html 表单。为此,我正在使用 Rails 3 中的 ActionMailer,如 http://edgeguides.rubyonrails.org/action_mailer_basics.html#example-action-mailer-configuration 教程中所建议的那样

我无法在邮件程序 erb 文件中使用诸如 form_tag 之类的 ActionView 帮助程序。如何在 erb 文件中访问它们。

我的 user.html.erb 文件有这样的代码:

<%= form_tag(:controller => "application", :action => "parent_select", :method=>"put") do %>
  Want To Attend
  <%= check_box_tag(:yes, '1', request.priority != 0) %>

<% end %>

我收到此错误:

undefined method `protect_against_forgery?' for #<#<Class:0xa0874c4>:0xa085a70>

【问题讨论】:

  • 唯一不起作用的助手是form_tag,因为它需要protect_from_forgery?它仅由 ActionController 实现,在 ActionMailer 的视图中不可用。所以我可以通过为 form_tag 助手手动生成 html 来解决它。其余的助手(check_box_tag、submit_tag)工作正常。

标签: ruby-on-rails ruby-on-rails-3 actionmailer actionviewhelper


【解决方案1】:

将表单放入电子邮件不是一个好主意,请参阅:

http://www.campaignmonitor.com/blog/post/2435/how-forms-perform-in-html-emai/

但是您在这里看到的是发送的表单没有 csrf_meta_tag(表单令牌和身份验证)。您可以为此操作关闭防伪保护,也可以手动将这些字段添加到您的表单中。

【讨论】:

  • 感谢您的链接。即使在顶层关闭伪造保护也无济于事,因为方法protect_from_forgery?是 form_tag 所必需的。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 2011-05-07
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多