如何捕获表单值并通过电子邮件作为ajax请求发送它们? 轨道

我正在尝试设置一个简单的表单,用户在其电子邮件地址中键入以订阅简报。 然后,我会收到一封包含用户电子邮件地址的电子邮件。

这是我到目前为止所尝试的:

表格:

  

路线

  post 'subscribe/:email', :to => 'welcome3#subscribe', as: "email_subscribtion" 

控制器:

 class Welcome3Controller < ApplicationController def subscribe EmailMeMailer.confirmation().deliver end end 

邮件:

 class EmailMeMailer < ApplicationMailer default from: "info@example.com" def confirmation @greeting = "Hi" mail to: "my_email_address@gmail.com", subject: "subscribtion confirmation" end end 

JQuery Ajax方法:

 $('#sub_form').submit(function(e) { e.preventDefault(); }).validate({ rules: { email: { required: true, email: true }, }, submitHandler: function (form) { var btn = $('#sub_btn'); btn.button('loading'); setTimeout(function() { btn.button('reset'); }, 3000); $.ajax({ type: 'POST', url: '/subscribe', // data: form.serialize(), dataType: 'json', async: true, data: { csrfmiddlewaretoken: '{{csrf_token}}', sub_email: $('#sub_email').val(), }, success: function (json) { $('#sub_output').html(json.message); $("#sub_email").prop('disabled', true); } }); return false; // for demo } }); 

我坚持:如何捕获提交的电子邮件地址并将其发送给自己? 我没有使用任何模型来保存数据。 此外,根据本教程,Mailer无权访问POST请求。

请记住,我正在将Django应用程序转换为RoR,以便我可以在cPanel上部署它。 你可以在这里看到Django应用程序:表单在页脚中。

这是观点:

 

Welcome3#subscribe

Find me in app/views/welcome3/subscribe.html.erb

编辑:

另外,在我的Django应用程序中,我发送到此URL:

 url: '/subscribe/' data: { csrfmiddlewaretoken: '{{csrf_token}}', email: $('#sub_email').val(), }, 

如何在Rails中有所不同?

这是一起的JQuery Ajax请求

 submitHandler: function (form) { var btn = $('#sub_btn'); btn.button('loading'); setTimeout(function() { btn.button('reset'); }, 3000); $.ajax({ type: 'POST', url: '/subscribe/', // data: form.serialize(), dataType: 'json', async: true, data: { csrfmiddlewaretoken: '{{csrf_token}}', email: $('#sub_email').val(), }, success: function (json) { $('#sub_output').html("Thanks"); $("#sub_email").prop('disabled', true); } }); return false; } 

编辑2:

在此阶段,当我单击订阅按钮时,我收到此路由错误:

路由错误没有路由匹配[POST]“/”

Rails.root:C:/ Sites / payligent

应用程序跟踪| 框架跟踪| 完整跟踪路由

路由从上到下优先匹配

帮助程序HTTP谓词路径控制器#操作路径/ URL路径匹配root_path GET / welcome #index

package_signup_path GET /pricing/:level(.:format)welcome2#pricing

email_subscribtion_path GET /subscribe/:email(.:format)welcome3#subscribe

在此处输入图像描述

您可以在控制器中获取发布数据,并将其作为参数传递给邮件程序操作。

编辑:上面的解决方案在这里工作。

HTML:

 <%= form_for :subscribe, html: { id: 'sub_form' } do |f| %>  

<% end %>

使用Javascript:

  

控制器(app / controllers / welcome3_controller.rb)

 class Welcome3Controller < ApplicationController def subscribe EmailMeMailer.confirmation(params[:sub_email]).deliver_now respond_to do |format| format.json { head :ok } end end end 

PS: .deliver方法在v2.3.8之后已弃用 。 您应该使用.deliver_now而不是它。

梅勒:(app / mailers / email_me_mailer.rb)

 class EmailMeMailer < ApplicationMailer default from: "info@example.com" def confirmation(email) @greeting = "Hi" @email = email mail to: "my_email_address@gmail.com", subject: "subscribtion confirmation" end end 

邮件程序视图:(app / mailers / email_me_mailer.rb)

 Email: <%= @email %> 

路由:(config / routes.rb)

 post '/subscribe' => 'welcome3#subscribe' 

PS:

1)不要忘记在app/views/layouts/mailer.text.erb上生成邮件程序布局。

2)请记住,布局和视图的扩展取决于您在邮件程序中定义的内容类型。 如果是文本(默认),则文件扩展名为.text.erb ,如果是HTML,则文件将具有.html.erb