渲染Liquid模板时“模板丢失”

时间:2012-07-29 21:26:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 template-engine liquid

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

这是控制器中的'show'动作:

  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

然而,当我访问该页面时,我得到一个“模板丢失”异常,并出现以下错误(请注意,“测试测试”是页面对象的body属性,这是目前唯一呈现的内容属性。模板):

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参数时,为什么要尝试找到另一个模板?这里有什么我想念的吗?我试图绕过使用任何模板文件,因为它们似乎不应该在这里需要(虽然如果我错了就不会强烈反对)。

1 个答案:

答案 0 :(得分:3)

因为渲染几乎总是采用文件名,而@template.render('page' => @page)包含普通的html。您应该像这样调用渲染:

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