2013-10-28 66 views
0

我正在開發rails應用程序,並且偶然發現了一個愚蠢而又簡單的問題。我需要通過觸發javascript按鈕來調用ruby方法。我有一個名爲Book的控制器,我在BooksHelper中放置了一個方法。我想要做的只是通過按鈕單擊來觸發執行此方法,這會在相同的頁面上輸出結果,我不希望該方法打開另一個頁面。我已經檢查了幾個可能的解決方案,但不能讓它們工作。 example.html.erb中沒有任何方法實際工作。我想獲得如何解決問題的幫助。 它只適用於如果我包裝在警報方法,但這不是我想要的。我希望輸出在實際頁面中打印出來。那麼,我該怎麼做呢?我已閱讀http://guides.rubyonrails.org/working_with_javascript_in_rails.html,但它不回答我的問題,因爲我不想用控制器和路由創建新頁面,而是執行ruby方法以便在同一頁面上查看結果。謝謝!通過Javascript調用rails ruby​​方法

<%= button_to_function "Output", "alert('#{outputString}')" %> 
---------------------------------------------------------------------------- 

#app/helpers/book_helper.rb 
    module BooksHelper 
    def outputString 
     "output" 
end 
    end 

----------------------------------------------------- 

#app/controllers/books_controller.rb 
    class PagesController < ApplicationController 
     def outputString 

     end 
    end 
    ------------------------------------------------------ 

    #app/views/books/example.html.erb 

    <%= button_to_function "Print", "outputString" %> 

    <%= button_to "Print", :action => "outputString" %> 

    <input class="ok" onclick="outputString()" type="button" value="Print" /> 

回答

1

一旦模板被渲染,控制器/幫手方法outputString不可用客戶端。

button_to_function是通過按鈕點擊調用JavaScript函數。您不能直接從javascript按鈕調用服務器端函數,而不會將AJAX請求發回服務器。

+0

那麼,這個問題只能通過AJAX解決?沒有其他選擇?我不知道AJAX不幸的是,猜猜現在就得學會它..謝謝! – user2928354

+0

@ user2928354,是的,你正在看[遠程過程調用](http://en.wikipedia.org/wiki/Remote_procedure_call)。而且,它使用AJAX。 – naomik

+0

是的,看起來就像Rails代碼是服務器端,視圖呈現並執行客戶端。所以當這個html被髮送到客戶端(瀏覽器),並且他們點擊它們在客戶端的按鈕時,他們就不能訪問服務器端代碼中只存在於服務器上的函數。 – cpjolicoeur