我在一个项目中工作,在这个项目中,我想根据与海关查询的关联动态创建小部件,并设置liquid来定制小部件的外观和感觉。我可以设置liquid,但当我尝试使用for循环迭代时,我无法获得值,但如果我将对象调用为string,则我可以获得它:{"netsales"=>42410110.43}
型号:
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查看:
<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>小工具模板:
{% for q in widget.query_list %}
{{ q.netsales }}
{% endfor %}
# Output blank发布于 2020-12-10 18:54:47
要使用liquid访问rails模型对象,必须为特定模型创建水滴。基本上,liquid允许用户自定义东西,drops的存在是为了防止用户对你的数据库做一些时髦的事情。
你必须为每个你想要通过liquid访问的模型创建drops。在您的例子中,应该是这样的:
module Drops
class WidgetDrop < Liquid::Drop
def initialize(widget)
@widget = widget
end
def name
@widget["name"]
end
...
end创建drop之后,您可以在解析它之前将其分配给模板:
template.assigns['widget'] = Drops::WidgetDrop.new(widget)https://stackoverflow.com/questions/65228152
复制相似问题