ruby-on-rails - 是否可以从 Rails 3 中的 Controller 调用使用 "content_tag"的方法?

标签 ruby-on-rails ruby-on-rails-3 content-tag

在我的 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/

相关文章:

ruby-on-rails - 在 Alpine Linux 上使用 headless Chrome/Chromium 的 Rspec

web-services - JSON 更改 Rails 3 中的日期格式

ruby-on-rails - 设计/密码 Controller 中的 EOFError#create

twitter-bootstrap - 正确使用PolymerElements中的内容标签

ruby-on-rails - JWT 如何注销

ruby-on-rails - 如何使用 Ruby 获取网站 (url) cookie 列表

ruby-on-rails - 使 rails 中的数组仅显示数字

html - 如何使用 <content select =""> 选择嵌套元素

ruby-on-rails - 如何使这段代码更像 Ruby 方式?

mysql - 如果字段长度小于 10 个符号,则 SQL 通过不带 %% 的 like 进行搜索