首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法为rails应用程序模型设置流动模板

问无法为rails应用程序模型设置流动模板
EN

Stack Overflow用户
提问于 2020-12-10 11:36:14
回答 1查看 32关注 0票数 0

我在一个项目中工作,在这个项目中,我想根据与海关查询的关联动态创建小部件,并设置liquid来定制小部件的外观和感觉。我可以设置liquid,但当我尝试使用for循环迭代时,我无法获得值,但如果我将对象调用为string,则我可以获得它:{"netsales"=>42410110.43}

型号:

代码语言:javascript
复制
class Widget < Accpac::Sqlserver::Base
  validates :name, :description, :template, presence: true
  belongs_to :user
  has_many :widget_queries, dependent: :destroy
  has_many :queries, through: :widget_queries

  def to_liquid
    { 
      'query_list' => query_list
    }
  end

  def query_list
    @result = ActiveRecord::Base.connection.exec_query(queries.map(&:statement).join(""))
    @result.to_a.join("")
  end
end

查看:

代码语言:javascript
复制
<div class="row">
  <div class="col-lg-12">
    <div class="wrapper wrapper-content animated fadeInUp">
      <div class="ibox">
        <div class="ibox-content">
          <div class="row">
            <%= Liquid::Template.parse(@widget.template).render('widget' => @widget) %>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

小工具模板:

代码语言:javascript
复制
{% for q in widget.query_list %}
    {{ q.netsales }}
{% endfor %}

# Output blank
EN

回答 1

Stack Overflow用户

发布于 2020-12-10 18:54:47

要使用liquid访问rails模型对象,必须为特定模型创建水滴。基本上,liquid允许用户自定义东西,drops的存在是为了防止用户对你的数据库做一些时髦的事情。

你必须为每个你想要通过liquid访问的模型创建drops。在您的例子中,应该是这样的:

代码语言:javascript
复制
module Drops
  class WidgetDrop < Liquid::Drop
   
   def  initialize(widget)
    @widget = widget
   end

   def name
    @widget["name"]
   end

   ...

end

创建drop之后,您可以在解析它之前将其分配给模板:

代码语言:javascript
复制
template.assigns['widget'] = Drops::WidgetDrop.new(widget)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65228152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档