Rails hStore postgresql activerecord数据库查询?

时间:2014-11-27 05:26:43

标签: ruby-on-rails ruby postgresql rails-activerecord

我希望能够在PG数据库上查询hStore列并仅返回与特定键对应的值。

数据如下所示:(请记住,:data是postgresql hStore

[ id: 2, data: {"tags"=>"Ruby, Objects", "type"=>"video", "title"=>"RubyTapas: Blocks, Procs, and Lambdas"}, 
  id: 3, data: {"tags"=>"JavaScript, Objects", "type"=>"video", "title"=>"RubyTapas: Blocks, Procs, and Lambdas"} ]

我想对此产生影响:

Model.uniq.pluck(:tags)

我期望的输出是:

Ruby, Objects, JavaScript

*我正在严格尝试使用activerecord和postgresql来实现它。

2 个答案:

答案 0 :(得分:2)

我能够通过以下方式成功获得我想要的结果:

Model.pluck(:data).map{|j| j['tags'].split(',') }.flatten.uniq

我仍然感兴趣的是一个对map的活跃记录关系不需要的解决方案。请告知。

答案 1 :(得分:0)

通过Ryan Bates

您可以定义一个类eval,使您可以访问值:

 class Thing
      self.class_eval do
           %w[tags type title].each do |key|
           scope "has_#{key}", lambda { |value| where("payload @> hstore(?, ?)", key,           value) }

           define_method(key) do
                payload && payload[key]
           end

           define_method("#{key}=") do |value|
                self.payload = (payload || {}).merge(key => value)
           end
      end
 end

现在你可以使用

 t = Thing.find(2)
 t.type      <-"video"

由于pluck返回一个字段值数组,这应该有效(尽管我还没有测试过)。