2011-06-02 35 views
13

在我的Rails 3應用程序我使用Ajax來獲得一個格式化的HTML:是否有可能調用Rails 3中控制器中使用「content_tag」的方法?

$.get("/my/load_page?page=5", function(data) { 
    alert(data); 
}); 

class MyController < ApplicationController 
    def load_page 
    render :js => get_page(params[:page].to_i) 
    end 
end 

get_page使用content_tag方法和應可也app/views/my/index.html.erb

由於get_page使用許多其他的方法,我封裝的所有功能於:

# lib/page_renderer.rb 
module PageRenderer 
    ... 
    def get_page 
    ... 
    end 
    ... 
end 

,其中包括它這樣:

# config/environment.rb 
require 'page_renderer' 

# app/controllers/my_controller.rb 
class MyController < ApplicationController 
    include PageRenderer 
    helper_method :get_page 
end 

,但由於content_tag方法不可用app/controllers/my_controller.rb ,我得到以下錯誤:

undefined method `content_tag' for #<LoungeController:0x21486f0> 

所以,我想補充:

module PageRenderer 
    include ActionView::Helpers::TagHelper  
    ... 
end 

,但後來我:

undefined method `output_buffer=' for #<LoungeController:0x21bded0> 

我在做什麼錯?

你會如何解決這個問題?

+0

,如果你有:'::的ActionView ::助手TagHelper '在你的控制器中。順便說一句,似乎你使用我的答案從你的幫手問題:) – apneadiving 2011-06-02 11:04:49

+0

@apneadiving:我包括'ActionView :: Helpers :: TagHelper',你可以看到上面。是的,你對我的其他問題的回答似乎是合理的,除了'get_page'處理表示,但在控制器中定義的事實:) – 2011-06-02 11:09:00

+0

該死的,我的評論真的沒用,對不起,我稍後再看一次:) – apneadiving 2011-06-02 13:31:12

回答

2

幫助者真的是查看代碼,不應該在控制器中使用,這就解釋了爲什麼它很難實現。

另一種(恕我直言,更好)的方法是使用你希望包裹在params [:page] .to_i上的HTML來構建一個視圖或部分。然後,在您的控制器中,您可以使用render_to_string在load_page方法末尾的主呈現中填充:js。那麼你可以擺脫所有其他的東西,它會更清潔。順便提一下,helper_method與你正在做的事情相反 - 它使視圖中的控制器方法可用。

+0

謝謝!我嘗試了你的建議,它的作用就像一個魅力:) – 2011-06-20 12:07:35

28

要回答這個問題提出,::的ActionView語境定義output_buffer方法,來糾正錯誤簡單地包括相關模塊:

module PageRenderer 
include ActionView::Helpers::TagHelper 
include ActionView::Context  
... 
end 
+0

'未定義的方法'content_tag'爲ActionView :: Helpers :: TagHelper:模塊' – 2014-04-20 16:21:38

+0

也在'seeds.rb'中工作! – anthony 2016-11-17 15:25:31

相關問題