2012-03-02 74 views
9

我有我認爲是一個非常簡單的問題。我來自PhP背景,並且經常這樣做,所以我可能會以錯誤的方式來看待這個問題。Ruby on Rails:沒有視圖的動作

我想在RoR中創建一個ajax處理程序。當用戶點擊一個按鈕時,javascript會關閉POST,並使用jQuery的ajax函數的「success:」參數給用戶提供反饋。

問題是,RoR試圖爲ajax處理程序加載一個視圖,當我真的只需要在控制器中執行幾行操作來完成數據庫工作,並回顯出狀態代碼,該狀態代碼將由用戶JavaScript的。

這只是一個mailchimp訂閱頁面,所以我只使用'home'控制器。

我的路線;

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

My Home Controller;

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

而我的測試JavaScript,只是讓你明白髮生了什麼;

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

我認爲這將是一個共同的問題,但我周圍的一派,只能設法找到建議重定向,因爲用戶將不會訪問/ mcsubscribe頁,似乎並不合適。

回答

11

使用

print params[:email] 

將只打印值應用程序記錄,而不是響應。

你想這樣的:

render :text => params[:email] 
12

看一看http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

您可能需要render :nothing => true

編輯:誤解你的問題,render :text => "yourtext"應該滿足您的需求

+0

渲染沒有什麼是不完全的OP想要達到的目標。他只想打印'params [:email]'的值。 – Koraktor 2012-03-02 12:35:56

+0

從你的鏈接**渲染:text => params [:email] **非常感謝!我知道它必須簡單。 – lynks 2012-03-02 12:36:32

0

你會需要這樣的事:

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

如果使用AJAX,則​​是發送文本。如果需要HTML格式(即用戶點擊鏈接或以常規格式填寫),則會發出重定向以通知用戶訂閱已成功。

+0

我會做所有用戶反饋的客戶端,如果我從控制器收到'是',並且消息消失,則會淡出表單。 – lynks 2012-03-02 12:43:23

+0

只是爲了完整起見:)而且還有一個好處是,它也適用於沒有JavaScript(啓用)的用戶,如果有任何遺留的... – Veger 2012-03-02 12:46:17

0

在Rails 5你需要使用「純」:

render plain: params[:email]