рдпрджрд┐ рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рдЗрддрдиреА рдмрдврд╝ рдЧрдИ рд╣реИ рдХрд┐ рд╡рд╣
рдПрдХ рдПрдХрд▓ рдХрд░реНрддрд╡реНрдп рдХреЗ
рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдирд╛ рд╢реБрд░реВ
рдХрд░ рджреЗрддрд╛ рд╣реИ , рддреЛ рдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрдИ рдФрд░
рдЬреБрдбрд╝реЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реВрдмреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛
DelegateClass
рдирд┐рд░реНрдорд╛рдг рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ
Person
рд╡рд░реНрдЧ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдмреЗрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ / рдпрд╛ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓реЗрдЦрдХ рдФрд░ рд╡рд┐рдХреНрд░реЗрддрд╛ рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ред
рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рд╢реБрд░реВ рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
class Person < ActiveRecord::Base has_many :articles
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХрд┐рддрдиреА рдЪреАрдЬреЗрдВ рдмреЗрдЪреАрдВ рдФрд░ рдХрд┐рддрдиреЗ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдПред" "рдмрдХрд╡рд╛рд╕," рдореИрдВ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ред
рдЗрд╕рдореЗрдВ рдПрдХ рдирдИ рдЪреБрдиреМрддреА рдЖ рд░рд╣реА рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рдХреНрд░реЗрддрд╛ / рд▓реЗрдЦрдХ рдФрд░ рдЦрд░реАрджрд╛рд░ рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╡рд░реНрдЧ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
class Person < ActiveRecord::Base
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдиреЗ
рдЦреБрд▓реЗрдкрди / рдирд┐рдХрдЯрддрд╛ (рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛рдкрди, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдВрдж) рдХреЗ
рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╡рд░реНрдЧ рдмрджрд▓ рджрд┐рдпрд╛ред рджреВрд╕рд░реЗ, рдЬрдм рдмрд┐рдХреНрд░реА / рдЦрд░реАрджрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ ("рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмреЗрдЪрддрд╛ рд╣реИ", "рд╡рд┐рдХреНрд░реЗрддрд╛ рдЦрд░реАрджрд╛рд░ рдХреЛ рдмреЗрдЪрддрд╛ рд╣реИ") рддреЛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдХреЛрдб
рд╕рд╛рдЭрд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ
рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдПрдХ рдирдИ рдЪреБрдиреМрддреА рдЖ рдЧрдИ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рдВрдмрдВрдз рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ NoSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ, рдпрд╛ XML рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк
ActiveRecord
рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИрдВ, рдпреЗ рд╕рднреА
has_many
рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╕реНрдердЧрд┐рдд рд╣реИред
рдорд┐рд▓реЛ: рдбреЗрд▓рд┐рдЧреЗрдЯрдХреНрд▓рд╛рд╕
Person
рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд░реНрдЧреЛрдВ рдХреА рдорджрдж рд╕реЗ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдЗрди рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдХреЗ рдмрджрд▓реЗ
person = Person.find(1) person.items
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
person = Person.find(1) seller = Seller.new(person) seller.items seller.first_name
рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
рдЕрдм рдЕрдЧрд░ рдЖрдкрдХреЛ ActiveRecord рд╕реЗ Mongoid рддрдХ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдбреЗрд▓рд┐рдЧреЗрдЯ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдмреЗрд╢рдХ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд░реНрдЧ рдПрдХ рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЗ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
#reload
:
person = Person.find(1) seller = Seller.new(person) seller.class
рдПрдХ рдФрд░
#id
рдпрд╣ рд╣реИ рдХрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ,
#id
рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд┐рд▓реНрдХреБрд▓
AcitveRecord#id
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ
AcitveRecord#id
рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
delegate :id, :to => :__getobj__
рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреЛрдб рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИрдВред
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ : рд╕рд░реНрдЧреЗрдИ рдкреЛрддрд╛рдкреЛрд╡ рдбреЗрд▓рд┐рдЧреЗрдЯрдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рдФрд░ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛
рдмрддрд╛рддреЗ рд╣реИрдВ :
require 'delegate' class Animal end class Dog < DelegateClass(Animal) end animal = Animal.new dog = Dog.new(animal) dog.eql?(dog)
рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐
#eql?
рдЖрдзрд╛рд░ рд╡рд╕реНрддреБ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
animal
) рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
dog.eql?(animal)
рджреВрд╕рд░реА рдУрд░,
#equal?
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдирд╣реАрдВ:
dog.equal?(dog)