has_many/belongs_to 関連付けを介して接続されている 2 つのモデルがあります。
Class Project < ActiveRecord::Base
has_many :tasks
end
Class Tasks < ActiveRecord::Base
belongs_to :project
end
各タスクは、HABTM 関係でタグ付けされています。
Class Tasks < ActiveRecord::Base
belongs_to :project
has_and_belongs_to_many :tags
end
タグ ID に基づいてプロジェクトのリストを取得しようとしています。Project
モデルでクラス メソッドを使用して、特定のタグを持つタスクを持つプロジェクトのリストを取得できます。
def by_tag(tag_id)
Project.joins(:tasks => :tags).where(:tags => {:id = tag_id})
end
理想的には、ビュー内の特定のタグのすべてのプロジェクトとそれに関連するタスクを一覧表示できるようにしたいと考えています。project.tasks
のようなプロジェクトで典型的な検索を使用した場合、通常、特定のプロジェクトに属するタスクのリストを取得できますProject.find(1)
。
ただし、project.tasks
新しいクラス メソッドを使用して見つかった結果を試すとProject.by_tag(1)
、"NoMethodError: Undefined Method 'tasks'" エラーが発生します。
タグによるプロジェクトの結果を得るために名前付きスコープを調べましたが、人々はそのアプローチから離れてクラス メソッドを支持しているようです。本当?