【发布时间】:2020-09-23 17:13:32
【问题描述】:
我想将哈希传递给渲染方法。当我这样做时,在我的控制台中一切正常:
@object = Object.find(params[:id])
@hash_object = @object.to_liquid
@template = Liquid::Template.parse("Welcome to {{object_title}}")
@template.render('object_title' => @hash_object["title"])
但是当我想通过我的控制器呈现页面并将其传递给需要香草液体的应用程序代理时,哈希键没有出现。但它被解释了,因为视图显示空白。如果它根本不起作用,视图会显示:“欢迎来到 {{object_title}}”,或者由于语法错误甚至不加载。
我尝试了几乎所有可能的方式来呈现模板。接下来的两个试用版不会引发错误,但仅在标题应出现的位置显示空白:
@pageview = Liquid::Template.parse(File.read(Rails.root + "app/views/app_proxy/show.html.erb"))
render text: @pageview.render('object_title' => @hash_object["title"]), content_type: "application/liquid"
第二个(我认为它更干净,更像红宝石):
respond_to do |format|
format.html do
render text: @pageview.render('object_title' => @hash_object["title"]), layout: false, content_type: "application/liquid"
end
end
这些渲染图中的错误在哪里,或者我遗漏了什么?
【问题讨论】:
-
当你检查
@hash_object["title"]类时,它会返回String还是别的什么?可能只是您告诉它@hash_object["title"].to_s的情况。虽然我没有使用 Liquid,但如果由于某种原因它没有从密钥中读取您的值,Ruby 可能会将其解释为其他内容。 -
哈希方法是在我的模型中定义的,我用 is_a?(String) 检查了类型,这给了我一个“真”。尽管如此,我还是添加了它并以相同的结果部署它。
-
好的。我还注意到您尝试在 Liquid 中渲染
.erb文件,然后使用它渲染text。但我的问题是:如果你渲染原始文件会发生什么,而不是render text放置render file?除了 HAML 和 ERB 之外,我真的不太习惯使用其他模板引擎,所以这可能不是最好的建议。 -
现在尝试将其作为本地渲染文件。结果相同
-
对不起,我的回答不适用于这里。我尝试了另一个答案。我会删除这个
标签: ruby-on-rails liquid