Ich benutze das Ahoy Juwel in einer Rails 4.2 App. Ahoy Events speichert Ereignisse mit einer Anzahl von Textattributen und a properties
Attribut, das Daten enthält, die ich abfragen möchte. Hier ist zum Beispiel das letzte Ereignis, das ich über die Schienenkonsole zurückgebe
>> 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">
Wie würde ich alle Ereignisse abrufen, bei denen Eigenschaften ["text"] = "View"
Ich habe versucht Ahoy::Event.where(:properties["text"] => "View").count
was zurückgibt: `` `
Ahoy :: Event.where (: Eigenschaften ["Text"] => "Ansicht") NoMethodError: undefinierte Methode
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:in
Block in expand_hash_conditions_for_aggregates " aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/sanitization.rb:58:ineach" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/sanitization.rb:58:in
expand_hash_conditions_for_aggregates " aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/relation/query_methods.rb:957:inbuild_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:in
woher!" aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/relation/query_methods.rb:574:inwhere" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/querying.rb:10:in
woher" von (irb): 13 aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:110:instart" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:9:in
Anfang" aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:68:inconsole" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:in
Führen Sie den Befehl aus!" aus /Users/darioggoore/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:in
benötigen" aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:inblock 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:in
load_abhängigkeit " aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:inrequire" from /Users/dariusgoore/development/blackops/bin/rails:8:in
" aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:inload" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in
Block in Last " aus /Users/darioggoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:inload_dependency" from /Users/dariusgoore/development/blackops/.bundle/gems/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in
Belastung" aus /Users/dariogoore/.rubies/ruby-2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:inrequire" from /Users/dariusgoore/.rubies/ruby-2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
benötigen" `` `
Ich habe online gesucht, um Hash-Attribute ohne Erfolg abzufragen. Jede Anleitung wird sehr geschätzt.
Antworten:
2 für die Antwort № 1Ahoy :: Event liefert eigentlich nichts Nützliches. Um alle Datensätze in einem Array zu erhalten, müssen Sie das Objekt zurückgeben Ahoy::Event.all
.
Was Sie eigentlich tun müssen, ist etwas in der Art:
Ahoy::Event.all.select { |event| event.properties["text"] == "View" }.size
Die Laufzeit wird nicht so gut, aber ich denke, das ist es, was Sie brauchen.
1 für die Antwort № 2
Benutzen Ahoy::Event.where("properties ->> "text" = "View"")
Viel schneller, um gültige JSONB-Abfragesyntax zu verwenden.