渲染液体模板时的"Template is missing"



我正在尝试呈现存储在数据库中的液体模板。

以下是我在控制器中的"显示"操作:

  def show
    @organization = Organization.find_by_subdomain(request.subdomain)
    @template = Liquid::Template.parse(Template.find(@organization.current_template).body)
    @page = @organization.pages.find(params[:id])
    respond_to do |format|
      format.html { render @template.render('page' => @page), :template => false}
      format.json { render json: @page }
    end
  end

然而,当我访问页面时,我得到了一个"Template is Missing"异常,并出现以下错误(注意,"testing testing"是页面对象的主体属性,这是当前模板中唯一呈现的内容):

Missing template /testing testing with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :haml]}.
Searched in: * "/Users/ashercohen/Documents/Rails/Vocalem-Rails/app/views" 
* "/Users/ashercohen/.rvm/gems/ruby-1.9.3-p194/gems/twitter-bootstrap-rails-2.1.1/app/views"
* "/Users/ashercohen/.rvm/gems/ruby-1.9.3-p194/gems/devise-2.1.2/app/views"

当我已经明确传递了:template => false参数时,它为什么要试图找到另一个模板?我这里缺什么了吗?我试图绕过使用任何模板文件,因为这里似乎不需要它们(尽管如果我错了,我并不强烈反对)。

因为render几乎总是使用文件名,而@template.render('page' => @page)包含纯html。您应该这样调用render:

render :text => @template.render('page' => @page), :content_type => :html

最新更新