我有一封电子邮件表格。但我正在制作测试电子邮件表单,用户可以在其中添加唯一的电子邮件,并将电子邮件测试发送到该特定电子邮件。
为了方便起见,我决定通过ajax执行测试电子邮件,并将整个内容粘贴到另一个电子邮件表单中。
我无法弄清楚如何将变量从我的HAML发送到我的控制器
new.html.haml
- form_tag admin_email_blast_path do
Subject
%br
= text_field_tag 'subject', :class => "mass_email_subject"
%br
Body
%br
= text_area_tag 'message', '', :name => 'editor1', :class => "mass_email_body"
%br/
= submit_tag 'Send Email', :class => 'button'
.grid_3.right.align_right.suffix_1 # <= TEST EMAIL :D
= text_field_tag 'email', nil, :style => "width: 150px;", :class => "test_email_address"
= link_to 'Test Email', test_email_admin_email_blast_path, :class => 'button test_email'
JS
$(".test_email").live("click", function() {
var email = $(".test_email_address")
var subject = $(".mass_email_subject");
var body = $(".mass_email_body");
data = "email=" + email.val() + "&subject" + subject.val() + "&body" + body.val();
$.ajax({type: "GET",
url: $(this).attr("href"),
dataType: "script"
data: data
});
return false;
});
控制器
def test_email
debugger
email = params[:email]
subject = params[:subject]
body = params[:body]
Notifier.deliver_email_blast(email, subject, body)
end
的routes.rb
admin.resource :email_blast, :member => {
:test_email => :get
}
如果这是一个愚蠢的新手问题,我提前道歉。 :(
答案 0 :(得分:7)
您可以使用data
参数:
$('.test_email').live('click', function() {
var subject = $('.mass_email_subject');
var body = $('.mass_email_body');
$.ajax({
type: 'GET',
url: this.href,
dataType: 'script',
data: { subject: subject.val(), body: body.val() }
});
return false;
});
答案 1 :(得分:3)
假设您根据Darin Dimitrov回答提交工作正常,那么您需要使用params对象。在这种情况下,您需要做的就是在控制器操作中访问params [:subject]和params [:body]。
编辑:
在回应评论时,GET和POST对params没有任何影响。如果表单不起作用,请尝试修改JS以使用序列化并在失败时返回错误:
$(".test_email").live("click", function() {
var subject = $(".mass_email_subject")
var body = $(".mass_email_body")
$.ajax({type: "GET",
url: $(this).attr("href"),
dataType: "script"
data: $('#form_id').serialize(),
error: function(){ alert("There was a problem, please try again.") }
});
return false;
});
如果它仍然不起作用,那么你最好看看你的控制器动作是否正在被击中。