Class: ActiveRecord::QueryMethods::HstoreChain

Inherits:
KeyStoreChain show all
Defined in:
lib/pgrel/active_record/store_chain/hstore_chain.rb

Overview

Store chain for hstore columns.

Instance Method Summary collapse

Methods inherited from KeyStoreChain

#any, #key, #keys

Methods inherited from StoreChain

#contained, #contains, #initialize, #not, #where

Constructor Details

This class inherits a constructor from ActiveRecord::QueryMethods::StoreChain

Instance Method Details

#value(*values) ⇒ Object

Value existence

Example

Model.create!(name: 'first', store: {a: 1, b: 2})
Model.create!(name: 'second', store: {b: 1, c: 3})

Model.store(:store).value(1, 2).all
#=>[Model(name: 'first', ...), Model(name: 'second')]


15
16
17
18
19
20
21
22
# File 'lib/pgrel/active_record/store_chain/hstore_chain.rb', line 15

def value(*values)
  query = String.new
  values.length.times do |n|
    query.concat("avals(#{@store_name}) @> ARRAY[?]")
    query.concat(' OR ') if n < values.length - 1
  end
  update_scope(query, *values.map(&:to_s))
end

#values(*values) ⇒ Object

Values existence

Example

Model.create!(name: 'first', store: {a: 1, b: 2})
Model.create!(name: 'second', store: {b: 1, c: 3})

Model.store(:store).values(1, 2).all #=> [Model(name: 'first', ...)]


31
32
33
# File 'lib/pgrel/active_record/store_chain/hstore_chain.rb', line 31

def values(*values)
  update_scope("avals(#{@store_name}) @> ARRAY[?]", values.map(&:to_s))
end