【问题标题】:Render form inside email rails在电子邮件栏内呈现表单
【发布时间】:2016-09-29 02:07:28
【问题描述】:

我正在尝试在邮件模板中嵌入一个表单。代码看起来有点像这样。我已经搭建了一个示例应用程序。

rails g scaffold 清单名称说明

我创建了一个名为 UserNotifier 的邮件程序类,它看起来像这样

class UserNotifier < ApplicationMailer
  default from: "from@example.com"

  def status_email(tenant, project)
    @tenant = tenant
    @project = project
    mail(to: 'abc@example.com', subject: 'Sample Status Email')
  end
end

在方法 status_email 的对应视图中,我的 status_email.html.erb 文件看起来像这样

    <!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h1>Hi </h1>
    <p>
      Sample status mail sent using smtp.
    </p>
      <%= form_for [@tenant, @project], url: {controller: "listings", action: "create"}, :html => { :class => "form-horizontal project" } do |f| %>
              <% if @project.errors.any? %>
                <div id="error_expl" class="panel panel-danger">
                  <div class="panel-heading">
                    <h3 class="panel-title"><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h3>
                  </div>
                  <div class="panel-body">
                    <ul>
                    <% @project.errors.full_messages.each do |msg| %>
                      <li><%= msg %></li>
                    <% end %>
                    </ul>
                  </div>
                </div>
              <% end %>

              <div class="control-group">
                <%= f.label :title, :class => 'control-label' %>
                <div class="controls">
                  <%= f.text_field :title, :class => 'form-control' %>
                </div>
              </div>
              <div class="control-group">
                <%= f.label :details, :class => 'control-label' %>
                <div class="controls">
                  <%= f.text_field :details, :class => 'form-control' %>
                </div>
              </div>
              <div class="control-group">
                <%= f.label :expected_completion_date, :class => 'control-label' %>
                <div class="controls">
                  <%= f.text_field :expected_completion_date, :class => 'form-control datepicker' %>
                </div>
              </div>

              <br />
                  <%= f.hidden_field :tenant_id, value: @tenant.id, :class => 'form-control' %>
                  <%= f.submit nil, :class => 'btn btn-primary' %>
                  <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                            root_path, :class => 'btn btn-default' %>


      <% end %>
  </body>
</html>

最后我在列表控制器中调用邮件方法,创建操作。这是代码sn-p:

定义创建

@listing = Listing.new(listing_params)
@project = @listing.project
@tenant = @project.tenant
@user = current_user
respond_to do |format|
  if @listing.save
    UserNotifier.status_email(@tenant, @project).deliver
    format.html { redirect_to @listing, notice: 'Listing was successfully created.' }
    format.json { render :show, status: :created, location: @listing }
  else
    format.html { render :new }
    format.json { render json: @listing.errors, status: :unprocessable_entity }
  end
end

结束

但最后当我提交时,我收到了这个错误(NoMethodError in Listings#create)。

undefined method protect_against_forgery? for #&lt;#&lt;Class..."

有人可以帮助我了解如何在我的电子邮件模板中呈现此表单,以便用户可以直接从电子邮件提交此表单,而无需登录应用程序。

【问题讨论】:

标签: ruby-on-rails email actionmailer form-for


【解决方案1】:

这是protect_against_forgery 错误,您可以通过在控制器中添加来解决它

skip_before_filter :verify_authenticity_token, :only => [YOUR ACTION]

【讨论】:

    猜你喜欢
    • 2012-08-11
    • 2021-06-03
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多