次のように、Drawer、Folder、FolderDocument、Document の 4 つのモデルがあります。
class Drawer < ActiveRecord::Base
has_many :folders #Drawer has many folders
end
class Folder < ActiveRecord::Base
belongs_to :drawer
has_many :folder_documents
# Folder has a "version" attribute which reflects the latest version
# Use proc to give back latest version by default e.g. folder.documents or folder.documents(5) will give back a specific version.
has_many :documents, :through => :folder_documents, :conditions => proc { |v = nil|
v ||= self.version
"documents.active IS TRUE AND version = #{v}"
}, :uniq => true
end
class FolderDocument < ActiveRecord::Base
# Has a version attribute
belongs_to :document
belongs_to :folder
end
class Document < ActiveRecord::Base
has_many :folder_documents
has_many :folders, :through => :folder_documents
end
私の問題は、作成できないことです
has_many :documents, :through => :folders
クラス Drawer では、proc 条件 (FolderDocument からのドキュメントの場合) は計算できません。「バージョン」は、中間フォルダーの関連付けではなく、Drawer のコンテキストで計算されるためです。
FolderVersionと呼ばれるFolderとFolderDocumentsの間に別のモデルを作成せずにこれを行う方法はありますか?
編集: 目的は、現在のバージョン (フォルダー内のバージョン) のフォルダーに属するすべてのドキュメントを取得することです。