2012-03-02 29 views
9

Tôi có những gì tôi nghĩ là một vấn đề rất đơn giản. Tôi đến từ một nền tảng PhP, và thường xuyên làm điều này, vì vậy tôi có thể nhìn vào điều này một cách sai lầm.Ruby on Rails: Hành động mà không cần xem

Tôi đang cố gắng tạo trình xử lý ajax trong RoR. Khi người dùng nhấp vào một nút, javascript sẽ kích hoạt POST và cung cấp phản hồi của người dùng bằng thông số "success:" của hàm ajax của jQuery.

Vấn đề là, RoR đang cố gắng tải chế độ xem cho trình xử lý ajax, khi tôi thực sự chỉ cần một vài dòng trong bộ điều khiển để thực hiện công việc cơ sở dữ liệu và lặp lại mã trạng thái. javascript.

Đây chỉ là một trang giữ đăng ký mailchimp, vì vậy tôi chỉ sử dụng bộ điều khiển 'nhà'.

Tuyến đường của tôi;

map.root :controller => 'home' 
map.connect '/mcsubscribe', :controller => 'home', :action => 'mcsubscribe' 

Bộ điều khiển chính của tôi;

class HomeController < ApplicationController 
    def index 
    # no content 
    end 
    def mcsubscribe 
    print params[:email] 
    end 
end 

Và javascript thử nghiệm của tôi, chỉ để bạn hiểu những gì đang diễn ra;

function mcSubscribe() { 
    var email = jQuery("#signup_input_email").val(); 
    jQuery.ajax({ 
     type: "POST", 
     url: "http://domain.com/mcsubscribe", 
     data: "email=" + email, 
     cache: false, 
     success: function(result) { 
      alert(result); 
     } 
    }); 
} 

Tôi nghĩ đây sẽ là một vấn đề thường gặp, nhưng tôi đã googled xung quanh và chỉ được quản lý để tìm gợi ý để chuyển hướng, như là người dùng sẽ không bao giờ truy cập vào trang/mcsubscribe, mà dường như không thích hợp.

Trả lời

11

Sử dụng

print params[:email] 

sẽ chỉ cần in giá trị đó các bản ghi ứng dụng, không phải vào phản hồi.

Bạn muốn điều này:

render :text => params[:email] 
12

Có một cái nhìn tại http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

Bạn có thể cần render :nothing => true

EDIT: hiểu sai câu hỏi của bạn, render :text => "yourtext" nên phù hợp với nhu cầu của bạn

+0

Rendering không có gì không phải là chính xác những gì OP muốn đạt được. Anh ta muốn in chỉ giá trị của 'params [: email]'. – Koraktor

+0

Từ liên kết của bạn, ** hiển thị: text => params [: email] ** hoạt động hoàn hảo nhờ! Tôi biết nó phải đơn giản. – lynks

0

Bạn sẽ cần một cái gì đó như thế này:

def mcsubscribe 
    # Do something to unsubscribe 
    respond_to do |format| 
    format.html { redirect_to(success_page) } 
    format.js { render :text => params[:email] } 
    end 
end 

Nếu ajax được sử dụng, params[:email] là gửi dưới dạng văn bản. Nếu định dạng HTML là bắt buộc (nghĩa là người dùng đã nhấp vào liên kết hoặc điền vào biểu mẫu thông thường), chuyển hướng được đưa ra để cho người dùng biết đăng ký đã thành công.

+0

Tôi sẽ thực hiện tất cả các phản hồi của người dùng, xóa bỏ biểu mẫu nếu tôi nhận được 'có' từ bộ điều khiển và mờ dần trong thông báo. – lynks

+0

Chỉ hiển thị vì lợi ích đầy đủ :) Và một lợi thế là cũng làm việc cho người dùng mà không cần JavaScript (bật), nếu có bất kỳ ... – Veger

0

Trong Rails 5 bạn cần phải sử dụng 'đơn giản':

render plain: params[:email] 
Các vấn đề liên quan