在我的 Rails 3 应用程序中,我使用 Ajax 来获取格式化的 HTML:
$.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>
我究竟做错了什么 ?
你会如何解决这个问题?
最佳答案
助手是真正的 View 代码,不应该在 Controller 中使用,这就解释了为什么很难做到这一点。
另一种(恕我直言,更好的)方法是使用您希望包裹在 params[:page].to_i 周围的 HTML 构建 View 或部分 View 。然后,在您的 Controller 中,您可以使用 render_to_string 在 load_page 方法末尾的主渲染中填充 :js。然后你可以摆脱所有其他的东西,它会更干净一些。
顺便说一句, helper_method 与您尝试做的相反 - 它使 Controller 方法在 View 中可用。
关于ruby-on-rails - 是否可以从 Rails 3 中的 Controller 调用使用 "content_tag"的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6213592/