Rails: рдПрд╕рдЯреАрдЖрдИ, рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдкреБрдирдГ рд▓реЛрдб! рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдмрдЧ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдЬрдире░ 2013  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rails/rails

рдореИрдВ рдЕрдВрдХ #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">] 

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдПрд╕рдЯреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпрд╣ рдЬреНрдЮрд╛рдд рд╕реАрдорд╛ рд╣реИред рд░реЗрд▓ рдХреЛ рдЙрди рдЙрдкрд╡рд░реНрдЧреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ 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

рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВрдиреЗ рдЗрд╕реЗ рд░реЗрд▓ рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ 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)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

greutter picture greutter  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

joevandyk picture joevandyk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ianks picture ianks  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

romariolopezc picture romariolopezc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cih picture cih  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ