0

次のように、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の間に別のモデルを作成せずにこれを行う方法はありますか?

編集: 目的は、現在のバージョン (フォルダー内のバージョン) のフォルダーに属するすべてのドキュメントを取得することです。

4

0 に答える 0