2011-06-02 62 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

相关问题