2010-09-15 26 views
5

Tôi có một mẫu email. Nhưng tôi đang tạo một mẫu email thử nghiệm nơi người dùng có thể thêm một email duy nhất và thử nghiệm email gửi email đó đến email cụ thể đó.Làm thế nào để vượt qua các jars AJAX từ jQuery tới bộ điều khiển của chúng?

Để dễ dàng, tôi quyết định thực hiện email kiểm tra qua ajax và dán toàn bộ nội dung bên trong biểu mẫu email khác.

tôi không thể tìm ra cách để gửi các biến từ HAML của tôi để điều khiển của tôi

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; 
}); 

Bộ điều khiển

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 
           } 

Tôi xin lỗi trước thời hạn nếu điều này là một câu hỏi newbie câm. :(

+1

Test_email_admin_email_blast_path có chấp nhận yêu cầu GET không? (Hãy thử "các tuyến đường rake | grep test_email_admin_email_blast" để xem cách Rails diễn giải các tuyến đường của bạn.rb) – tobym

+0

Có. test_email_admin_email_blast GET /admin/email_blast/test_email(.:format) {: controller => "admin/email_blasts",: action => "test_email"} – Trip

Trả lời

7

Bạn có thể sử dụng data tham số:

$('.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; 
}); 
+0

Có nhưng cách kết nối với bộ điều khiển ray của tôi? Làm cách nào để đặt các vars cho Trình thông báo của tôi? – Trip

+1

Tất cả điều này có nghĩa là nó sẽ gửi một yêu cầu AJAX đến '/ testemail /? Subject = foo & body = bar' và thực thi javascript được trả về từ hành động điều khiển này. –

+0

Phải. Tôi đã nhận phần đó. Nhưng nó không trả lời câu hỏi của tôi như thế nào các biến này có thể được đọc bởi bộ điều khiển đường ray. Tôi đánh giá cao sự giúp đỡ. – Trip

3

Giả sử bạn đang nhận được đệ trình để làm việc một cách chính xác dựa trên Darin Dimitrov trả lời thì bạn cần phải sử dụng đối tượng params Trong trường hợp này có vẻ như tất cả. bạn cần phải làm là params truy cập [: chủ đề] và params [: thân]. trong hành động điều khiển của bạn

EDIT:.

để đối phó với những bình luận, GET và POST làm cho không có sự khác biệt cho params Nếu hình thức không hoạt động, hãy thử sửa đổi bạn JS để sử dụng serialize và trả lại lỗi về lỗi:

$(".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; 
}); 

Nếu vẫn không hoạt động thì bạn nên xem liệu hành động điều khiển của bạn có bị ảnh hưởng hay không.

+0

Biểu mẫu bên dưới không hoạt động. Các vars không chuyển đến params [: subject], hoặc bất kỳ cái nào khác. Có phải đó là vì "GET" và không phải là "POST" không? Tôi đã thử cả hai, cũng đảm bảo rằng thành viên tuyến đường của tôi là: yêu cầu đăng. Khi yêu cầu routes.rb và yêu cầu ajax là POST, sau đó tôi nhận được một 'Chỉ yêu cầu bài được phép'. khi cả hai đều GET, tôi nhận được thông số nil. – Trip

+0

Bộ điều khiển đang bị ảnh hưởng. Tôi đặt một trình gỡ lỗi ngay trước khi tôi xác định các params. Nhưng một khi tôi đến đó, tất cả họ đều được định nghĩa là 'nil'. Lạ đúng không? Tôi đã thử phương thức serialize() của bạn và đặt một id duy nhất xung quanh biểu mẫu của tôi, và nó không cung cấp. – Trip

+1

Trường hợp chính xác là trình gỡ lỗi của bạn ... sau 'def test_email'? – tobym

Các vấn đề liên quan