こんにちは私はしばらくの間これの解決策を探していました。Rails2.3.5の使用
いくつかの子クラスを持つ親クラスがあり、1500行の長さのファイルがないようにするために、子クラスをapp/modelsディレクトリのサブディレクトリに保持しています。
私がこの投稿を見た最近まで:ここ
子クラスをロードすることすらできませんでした
ここで、次のようなself.inheritedクラスメソッドを使用する方法で各子にアクセスします。
class Project < ActiveRecord::Base
CHILDREN = []
def self.inherited(child)
super
CHILDREN << child
puts "CHILDREN.inspect: #{CHILDREN.inspect}"
end
def self.valid_child_types
CHILDREN.collect{ |child| child.project_type}
end
end
一時的に、物事がどのようにロードされているかをよりよく理解するために、いくつかのデバッグステートメントを配置しました。コンソールを起動して、この動作に気づきました。
>> Project
require_or_load /Users/frankdrebin/Sites/cerp/app/models/project.rb
loading /Users/frankdrebin/Sites/cerp/app/models/project
require_or_load /Users/frankdrebin/Sites/cerp/app/models/status.rb
loading /Users/frankdrebin/Sites/cerp/app/models/status
=> Project(id: integer, url: string, deadline: date, state: string, type: string, priority: integer, status_id: integer)
>> Project::CHILDREN
=> []
>> ArticleProject
require_or_load /Users/frankdrebin/Sites/cerp/app/models/projects/article_project.rb
loading /Users/frankdrebin/Sites/cerp/app/models/projects/article_project
CHILDREN.inspect: [ArticleProject(id: integer, url: string, deadline: date, state: string, type: string, priority: integer, status_id: integer)]
require_or_load /Users/frankdrebin/Sites/cerp/vendor/gems/state_machine- 0.7.3/lib/state_machine.rb
loading /Users/frankdrebin/Sites/cerp/vendor/gems/state_machine-0.7.3/lib/state_machine
=> ArticleProject(id: integer, url: string, deadline: date, state: string, type: string, priority: integer, status_id: integer)
>> Project::CHILDREN
=> [ArticleProject(id: integer, url: string, deadline: date, state: string, type: string, priority: integer, status_id: integer)]
>>
子クラスをすべて1つの巨大なファイルに戻すなど、これに対するあまり洗練されていない解決策があると確信していますが、可能な限りこれを避けたいと思います。
ありがとう