Können Sie erklären, was die folgende Methode und wie es funktioniert? Ich habe versucht, es mehrere Stunden lang zu erforschen, aber ich konnte es noch nicht herausfinden.Ruby Select-Methode in Hat viele durch Assoziation
Was ich verstehe, ist die Ruby-Methode "wählen" nimmt in der Regel einen Block, nicht wie die in dieser Methode verwendet. Die Methode self.tag_counts ist im Ereignismodell meiner Anwendung wie folgt.
models/event.rb
class Event < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
belongs_to :organizers, class_name: "User"
has_many :taggings
has_many :tags, through: :taggings
def all_tags
tags.map(&:name).join(",")
end
def all_tags=(names)
self.tags = names.split(",").map do |n|
Tag.where(name: n.strip).first_or_create!
end
end
def self.tagged_with(name)
Tag.find_by_name!(name).events
end
def self.tag_counts
Tag.select("tags.name, count(taggings.tag_id) as count").joins(:taggings).group("taggings.tag_id")
end
end
models/tag.rb
class Tag < ActiveRecord::Base
has_many :taggings
has_many :events, through: :taggings
end
models/tagging.rb
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :event
end
Also die Auswahl Methode in diesem Fall ist nicht die Array-Methode, sondern die ActiveRecord Select-Methode? –
Das ist richtig. Es gibt nur an, dass die in der Abfrage zurückgegebenen Spalten der Tag-Name und die Anzahl der Tags auf jedem Tag sind. –
Sie haben richtig geraten. Das Beispiel ist genau die Eingabedaten für eine Tag Cloud. –