Rails按嵌套键/值查询

时间:2015-10-20 18:28:45

标签: ruby-on-rails ruby-on-rails-4 activerecord serialization hashmap

我刚学会了tag a record如何通过该标记查询,但我不确定它是否适用于这种情况。我想在我的模型上有一个列,其中包含任意键的散列(即每个记录可能有或可能不同),并且我希望能够通过这些键/值进行查询。

这样的事情:

my_dog = Pet.new
my_dog.traits = {
    :weight => 20,
    :has_shots => true,
    :color => 'brown'
}

their_cat = Pet.new
their_cat.traits = {
    :weight => 4,
    :has_shots => false,
    :color => 'brown'
}

我知道如果我想要做的就是稍后输出,我可以序列化这些数据。但我想在这里实现的是能够通过此哈希中的键查询这些记录。例如(显然错误的查询语法):Pet.where(traits: 'weight < 25 AND color = "brown"')

这种事情有可能吗?

1 个答案:

答案 0 :(得分:0)

您可以在Pet上定义范围,以根据您想要的值进行查询(类方法也适用于此,但以下是关于何时优先选择其中一个的问题:http://www.justinweiss.com/articles/should-you-use-scopes-or-class-methods/) 。

一些例子:

scope :max_weight, -> (weight) { where("weight <= ?", weight) }
scope :min_weight, -> (weight) { where("weight >= ?", weight) }
scope :has_color, -> (color) { where("color = ?", color) }

然后,假设您有权访问要过滤的标记变量,则应该可以调用Pet.max_weight(25).has_color('brown')。这就是你要追求的吗?