/ / Querying Ahoy Gem Events - ruby-on-rail, ruby, hash, ahoy

Querying Ahoy Gem Events - ruby-on-rail, ruby, hash, ahoy

Używam klejnotu Ahoy w aplikacji Rails 4.2. Ahoy Events przechowuje zdarzenia z wieloma atrybutami tekstowymi i properties atrybut zawierający dane, które chcę przesłać. Na przykład tutaj jest ostatnie zdarzenie, które wracam za pośrednictwem konsoli rails

>> Ahoy::Event.last Ahoy::Event Load (3.8ms) SELECT "ahoy_events".* FROM "ahoy_events" ORDER BY "ahoy_events"."id" DESC LIMIT 1 => #<Ahoy::Event id: "fffff17f-44e6-41d7-9c32-fa895338f54e", visit_id: "6b05b1ca-3863-46da-9c48-a3ab5fa4a9ee", user_id: 1, name: "$click", properties: {"tag"=>"a", "page"=>"/conversations/2", "text"=>"View", "href"=>"/conversations/2"}, time: "2015-08-23 13:25:51">

Jak mogę pobrać wszystkie zdarzenia, w których właściwości ["text"] = "View"

próbowałem Ahoy::Event.where(:properties["text"] => "View").count

która zwraca: `` `

Ahoy :: Event.where (: properties ["tekst"] => "Widok") NoMethodError: niezdefiniowana metoda to_sym" for nil:NilClass from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/sanitization.rb:59:inblokuj w expand_hash_conditions_for_aggregates " z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/sanitization.rb:58:in each" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/sanitization.rb:58:inexpand_hash_conditions_for_aggregates " z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/relation/query_methods.rb:957:in build_where" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/relation/query_methods.rb:584:ingdzie!" z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/relation/query_methods.rb:574:in where" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/querying.rb:10:ingdzie" z (irb): 13 z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:110:in start" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:9:inpoczątek" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:68:in console" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:inUruchom polecenie!" z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands.rb:17:in <top (required)>" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:inwymagać" z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in block in require" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:inload_dependency " z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in require" from /Users/dariusgoore/development/blackops/bin/rails:8:in" z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in load" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:inblok w ładunku " z /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in load_dependency" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:inobciążenie" from /Users/dariusgoore/.rubies/ruby-2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require" from /Users/dariusgoore/.rubies/ruby-2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:inwymagać" `` `

Szukałem w Internecie zapytań o atrybuty mieszania bez powodzenia. Wszelkie wskazówki są mile widziane.

Odpowiedzi:

2 dla odpowiedzi № 1

Ahoy :: Event faktycznie nie zwraca niczego użytecznego Aby uzyskać wszystkie rekordy w obiekcie zwracającym tablicę, musisz użyć Ahoy::Event.all.

Więc to, co musisz zrobić, to coś podobnego do tego:

Ahoy::Event.all.select { |event| event.properties["text"] == "View" }.size

Czas pracy nie będzie taki ładny, ale myślę, że to jest to, czego potrzebujesz.


1 dla odpowiedzi nr 2

Posługiwać się Ahoy::Event.where("properties ->> "text" = "View"") O wiele szybciej, aby użyć poprawnej składni zapytania JSONB.