Ruby复杂数据结构交叉通配符

Ruby复杂数据结构交叉通配符,ruby,Ruby,下面是单个XML记录的示例;每个记录中可能有1->N个人字段,中有许多记录 我有一个生成每个条目的模板,我想重新使用该模板来执行查找(为了DRY的利益)。我想我可以获取一个空模板,用某种通配符填充它,然后在填充的模板和数据库之间执行交集(&&)。目前我有一个查找例程,它有多行find_all…,每行都有,它可能与生成模板不同步,这不好 require 'xmlsimple' xml = Q%( <root> <location> <name>Sa

下面是单个XML记录的示例;每个记录中可能有1->N个人字段,
中有许多记录

我有一个生成每个条目的模板,我想重新使用该模板来执行查找(为了DRY的利益)。我想我可以获取一个空模板,用某种通配符填充它,然后在填充的模板和数据库之间执行交集(
&&
)。目前我有一个查找例程,它有多行
find_all…,每行都有
,它可能与生成模板不同步,这不好

require 'xmlsimple'

xml = Q%(
<root>
  <location>
    <name>San Jose</name>
    <trips>
      <trip>
        <date>April 1, 2014</date>
        <person>
          <pname>Bob</pname>
          <cost>500.00</cost>
          <days>3</days>
        </person>
        <person>
          <pname>Alice</pname>
          <cost>30.00</cost>
          <days>1</days>
        </person>
      </trip>
    </trips>
  </location>
  <location>
    <name>Florida</name>
    <trips>
      <trip>
        <date>April 20, 2014</date>
        <person>
          <pname>Alice</pname>
          <cost>300.00</cost>
          <days>3</days>
        </person>
      </trip>
      <trip>
        <date>May 1, 2014</date>
        <person>
          <pname>Alice</pname>
          <cost>500.00</cost>
          <days>4</days>
        </person>
      </trip>
    </trips>
  </location>
</root>
我想做这样的事情(逻辑上):

>> match_hash = XmlSimple.xml_in(template)
=> {"location"=>[{"name"=>["*"], "trips"=>[{"trip"=>[{"date"=>["*"], "person"=>[{"pname"=>["Bob"], "cost"=>["*"], "days"=>["*"]}]}]}]}]}
>> result = db_hash && match_hash
=> {"location"=>[{"name"=>["San Jose"], "trips"=>[{"trip"=>["April 1, 2014"], "person"=>[{"pname"=>["Bob"], "cost"=>["500.00"], "days"=>["3"]}]}]}]}
使用
&&
时是否可以使用通配符

有没有一种方法可以在不指定每个哈希键名称的情况下通用地执行此操作


目标是有一个描述数据结构组织的单一来源,并将其用于读写。当我创建一个新条目时,我正在评估一个模板,这可以用来创建上面的模板。

您可以使用模板引擎。似乎很适合,因为它可以将ActiveRecord查询合并到模板中


另一种选择是使用XML本身作为模板。一个简单的Nokogiri脚本可以用文本替换通配符。

没有内置的方法来执行您想要的操作。您需要编写自己的算法来实现这一点。我浏览了文档,它看起来像一个模板引擎可以提供更好的方法来创建新条目。然而,我不清楚模板引擎如何为复杂的搜索提供额外的功能。我遗漏了什么吗?搜索?你能提供你想要搜索的更多细节吗?这是在数据库端吗?或者说是XPath查询?给定定义的记录结构,我希望收集与一组查询值匹配的所有记录。我当前的生产代码使用一组嵌套的
find_all
语句,这些语句必须与记录结构完全匹配,例如
xml[“location”]。to_a[0]。to_h[“name”]。find_all
。这可能会导致写入方法和查询/搜索方法不一致。我希望Ruby提供了一种方法来确保write和query/search方法始终匹配定义的模板。我可以看到如何编写一些代码来解析模板,然后评估生成的find_all语句。然而,这似乎是一个普通的操作,我想看看是否有人已经解决了这个问题。嗯,这根本不是一个普通的操作。在某种数据库中,复合查询更好,SQL或NoSQL(例如MongoDB)
>> match_hash = XmlSimple.xml_in(template)
=> {"location"=>[{"name"=>["*"], "trips"=>[{"trip"=>[{"date"=>["*"], "person"=>[{"pname"=>["Bob"], "cost"=>["*"], "days"=>["*"]}]}]}]}]}
>> result = db_hash && match_hash
=> {"location"=>[{"name"=>["San Jose"], "trips"=>[{"trip"=>["April 1, 2014"], "person"=>[{"pname"=>["Bob"], "cost"=>["500.00"], "days"=>["3"]}]}]}]}