рдореИрдВ рдЕрдВрдХ #868 рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдБ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдЬ рднреА рдореМрдЬреВрдж рд╣реИред
рдореИрдВрдиреЗ рд░реВрдмреА-1.9.3-p362 рдФрд░ рд░реЗрд▓ 3.2.9 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ
рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдмрд╛рд▓ рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ config.cache_classes = true
> Support.all
=> []
> Employee
=> Employee(id: integer, type: string)
> Administrator
=> Administrator(id: integer, type: string)
> Support.all
=> [#<Administrator id: 1, type: "Administrator">, #<Employee id: 2, type: "Employee">]
рдореИрдВрдиреЗ рдЗрд╕реЗ рд░реЗрд▓ рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ 4
рд░реЗрд▓ 4.0.0.рдмреАрдЯрд╛
рд░реВрдмреА 1.9.3p194
1.9.3p194 :001 > Administrator.create
1.9.3p194 :003 > Employee.create
1.9.3p194 :008 > Support.all
Support Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."type" IN ('Support', 'Administrator', 'Employee')
=> #<ActiveRecord::Relation [#<Administrator id: 1, type: "Administrator">, #<Employee id: 2, type: "Employee">]>
1.9.3p194 :009 > reload!
Reloading...
=> true
1.9.3p194 :010 > Support.all
Support Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."type" IN ('Support')
=> #<ActiveRecord::Relation []>
рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдПрд╕рдЯреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпрд╣ рдЬреНрдЮрд╛рдд рд╕реАрдорд╛ рд╣реИред рд░реЗрд▓ рдХреЛ рдЙрди рдЙрдкрд╡рд░реНрдЧреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ require_dependency
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
# app/models/support.rb
class Support < User
end
require_dependency 'administrator'
require_dependency 'employee'
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рдЙрдкрд╡рд░реНрдЧ рд╣реИрдВ рддреЛ рдЖрдк рдЙрди рд╕рднреА рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Dir[]
рдФрд░ app
рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
# app/models/user.rb
class User < ActiveRecord::Base
end
Dir["#{Rails.root}/app/users/*.rb"].each do |file|
require_dependency file
end
рдпрд╛ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╕реВрдЪреА рдХреЛ Model.descendants
рдореЗрдВ рд╣рд╛рд░реНрдб рдХреЛрдб рдХрд░рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
# app/models/user.rb
class User < ActiveRecord::Base
def self.descendants
[Support, Administrator, Employee]
end
end
рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореЗрд░реЗ рдореЙрдбрд▓ рдП, рдмреА (рдФрд░ рдЕрдзрд┐рдХ) <рд╕реА, рдбреА (рдФрд░ рдЕрдзрд┐рдХ) <рдмреА рд╣реИрдВред
рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ "рдЕрдирд┐рдпрдорд┐рдд рд╕реНрдерд┐рд░ рдмреА" рдорд┐рд▓рддрд╛ рд╣реИред рдХреБрдЫ рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛_рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ 1) рдХрд┐рд╕ рд╡рд░реНрдЧ (рдПрд╕) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдмреА?), рдФрд░ 2) рдЗрд╕реЗ рдХрд╣рд╛рдВ рдХрд░рдирд╛ рд╣реИред
рдпреЗ рдореЙрдбрд▓ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рдХрд╛ рд▓реЛрдб рдСрд░реНрдбрд░ рдкрд░ рднреА рдкреНрд░рднрд╛рд╡ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП A рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд_X, X has_many Bs рдФрд░ Cs)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдПрд╕рдЯреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпрд╣ рдЬреНрдЮрд╛рдд рд╕реАрдорд╛ рд╣реИред рд░реЗрд▓ рдХреЛ рдЙрди рдЙрдкрд╡рд░реНрдЧреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ
require_dependency
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рдЙрдкрд╡рд░реНрдЧ рд╣реИрдВ рддреЛ рдЖрдк рдЙрди рд╕рднреА рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
Dir[]
рдФрд░app
рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:рдпрд╛ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╕реВрдЪреА рдХреЛ
Model.descendants
рдореЗрдВ рд╣рд╛рд░реНрдб рдХреЛрдб рдХрд░рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред