【问题标题】:Attaching datamapper operator to ruby symbol and put into hash将 datamapper 运算符附加到 ruby​​ 符号并放入哈希中
【发布时间】:2012-11-07 23:41:49
【问题描述】:

我有:

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

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

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

gte 是一个 Datamapper 运算符,如 http://datamapper.org/docs/find.html 中所述

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

【问题讨论】:

  • 稍后你想用这个哈希做什么?
  • 我想将该哈希传递给 Datamapper 以从模型产品中检索所有数据。例如。 Product.all(newhash) 这将为我提供 abc >= 22 和 klm >= 33 和 nop >= 44 的所有行
  • 啊,我明白了。它比我想象的要简单:)

标签: ruby datamapper ruby-datamapper


【解决方案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::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

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2012-03-31
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多