次のメソッドは何を行い、どのように機能するのか説明できますか?私はそれを数時間研究していることを理解しようとしましたが、まだ理解できませんでした。私が理解Has Many Many ThroughアソシエーションのRuby選択メソッド
def self.tag_counts
Tag.select("tags.name, count(taggings.tag_id) as count").joins(:taggings).group("taggings.tag_id")
end
はルビー方法通常ブロックを取る「選択」で、この方法で使用されるものが好きではありません。 self.tag_countsメソッドは、次のようにアプリケーションのイベントモデルにあります。
モデル/ 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
モデル/ tag.rb
class Tag < ActiveRecord::Base
has_many :taggings
has_many :events, through: :taggings
end
モデル/ tagging.rb
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :event
end
したがって、このケースで使用されるselectメソッドは配列メソッドではなく、ActiveRecord selectメソッドですか? –
それは正しいです。クエリで返される列がタグ名と各タグのタグ付けの数であることを指定するだけです。 –
あなたは正しいと推測しました。この例はまさにタグクラウドの入力データです。 –