将datamapper运算符附加到ruby符号并放入哈希

时间:2012-11-07 23:41:50

标签: ruby datamapper ruby-datamapper

我有:

{xyz => [:abc, :klm, :nop]}

我希望动态地拥有这样的东西(22,33,44是一些随机值):

{:abc.gte => 22, :klm.gte => 33, :nop.gte => 44}

gte是Datamapper运算符,如http://datamapper.org/docs/find.html

所述

有没有人知道如何构建第二个哈希?

1 个答案:

答案 0 :(得分:1)

随机值的最小值/最大值是多少?

我们假设它的范围是1到100.然后你就是这样做的:

require 'data_mapper'

properties = [:abc, :klm, :nop]
rand_range = (1..100).to_a

hash = properties.inject({}) { |h, p| h.update p.gte => rand_range.sample  }
p hash

你得到一个可以提供给datamapper过滤器的哈希:

{#<DataMapper::Query::Operator @target=:abc @operator=:gte>=>24, #<DataMapper::Query::Operator @target=:klm @operator=:gte>=>52, #<DataMapper::Query::Operator @target=:nop @operator=:gte>=>51}

请参阅live demo here