将 rails 个对象或变量传递给 liquid

Passing rails objects or variables to liquid

我为 shopify 编写了一个应用程序,它按设计运行。现在我想添加应用程序代理以将内容嵌入到商店中。代理工作正常,但 shopify 期望响应(在我的例子中是一个视图)为纯液体。 ruby 中的原始视图具有一些使用多个变量和对象的逻辑。

我安装了液体gem。我浏览的教程似乎有点过时了。

@template = Liquid::Template.parse("hi {{name}}")  # Parses and compiles the template
@template.render( 'name' => 'tobi' )               # Renders the output 
=> "hi tobi"

这是有效的,但它只适用于字符串。我看了 railscast,我认为这是让液体接触物体的简单方法。但它又过时了,“liquid_methods”不再起作用了。

所以我在我的模型中写了我自己的方法:

  def to_liquid
    { "title" => self.title,
      "description" => self.description
    } 

如果我尝试在我的控制台中使用我的方法渲染它,就像这样:

@template = Liquid::Template.parse("Welcome to {{object.title}}")
@template.render(object.title.to_liquid)

我收到以下错误:

Liquid::ArgumentError (Liquid error: Expected Hash or Liquid::Context as parameter)

现在我卡住了...

使用液体访问 RoR 对象的最简单方法是什么?

在尝试了几乎所有可能的传递变量的方法后,这成功了:

@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"])