рдкреЙрд▓рд┐рдореЙрд░реНрдлрд┐рдХ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдФрд░ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рдбреЗрд╡рд┐рд╕

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред
рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рдмрд╣реБрд░реВрдкреА рд╕рдВрдШреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдХреБрдЫ рдЕрд╢рд┐рд╖реНрдЯ рдереЗ: рдХреНрдпреЛрдВ, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд░реЗрд▓ 2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдЕрдЧрд░ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЖ рд░рд╣рд╛ рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рд░реЗрд▓ 3 рдореЗрдВ рдмрд╣реБрд░реВрдкрд┐рдП рд╕рдВрдШреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛, рдпрд╛ рдПрдХ рд╕рд╛рдЗрдЯ рдкрд░ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрдпрд╛: рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрдХред рдпрд╣ рд▓реЗрдЦ рдмрд╣реБрд░реВрдкреА рд╕рдВрдШреЛрдВ рдФрд░ рд░рддреНрдиреЛрдВ рдбреЗрд╡рд┐рд╕ (рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП) рдФрд░ рдХреИрдирдХрди (рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП) рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ред

рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдерд╛: рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рдкрдВрдЬреАрдХрд░рдг рдФрд░ рд▓реЙрдЧрд┐рди рдПрдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХреМрди рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ: рдЧреНрд░рд╛рд╣рдХ рдпрд╛ рдареЗрдХреЗрджрд╛рд░ред
рддрджрдиреБрд╕рд╛рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднреВрдорд┐рдХрд╛рдПрдБ рдереАрдВ, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рдереЗред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдирдХ рдбреЗрд╡рд┐рд╕ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рдбреЗрд╡рд┐рд╕ рдиреЗ рдЬреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рдпрд╛, рдЙрд╕рдореЗрдВ рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдбреНрд╕ рдЬреЛрдбрд╝реЗ:
t. string :name, : null => false t.references :character, :polymorphic => true * This source code was highlighted with Source Code Highlighter .
  1. t. string :name, : null => false t.references :character, :polymorphic => true * This source code was highlighted with Source Code Highlighter .
  2. t. string :name, : null => false t.references :character, :polymorphic => true * This source code was highlighted with Source Code Highlighter .
t. string :name, : null => false t.references :character, :polymorphic => true * This source code was highlighted with Source Code Highlighter .

рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдЖрдк рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ: рджреЗрд╢, рдкрддрд╛, рдЖрджрд┐ред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореЗрд░рд╛ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо рдерд╛ред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐, (http://apidock.com/rails/ActiveRecord/ConnectionAdapters/Table/references), рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджреЛ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдПрдЧреА: character_id рдФрд░ character_type: рдкрд╣рд▓рд╛ "рдЪрд░рд┐рддреНрд░" рдХрд╛ рдЖрдИрдбреА рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ред рдЬрд╣рд╛рдВ рдЗрд╕ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд░реЗрдХ рдбреАрдмреА рдЪрд▓рд╛рдПрдВ: рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ user.rb рдореЙрдбрд▓ рдЬреЛрдбрд╝реЗрдВред
  1. рд╡рд░реНрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ <ActiveRecord :: рдмреЗрд╕
  2. # рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрд╡рд┐рд╕ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
  3. #: token_authenticatable ,: рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рдкреБрд╖реНрдЯрд┐рдХрд╛рд░рдХ: рд▓реЙрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рд╕рдордп рд╕реЗ рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп, рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░: omniauthable
  4. devise: database_authenticatable ,: рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп,: рдорд╛рдиреНрдп
  5. # рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн (рдпрд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд ) рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯрдЕрдк рдХрд░реЗрдВ
  6. attr_accessible: name ,: email ,: password ,: рдпрд╛рдж_рдореЗ ,: character_id ,: character_type ,: character ,: character_attributes
  7. # рдорд╛рдиреНрдпрддрд╛рдУрдВ
  8. validates_presence_of: рдирд╛рдо ,: character_type
  9. validates_inclusion_of: character_type ,: in =>% w (рдЧреНрд░рд╛рд╣рдХ рдХрд╛рд░реНрдпрдХрд╛рд░реА)
  10. # рд╕рдВрдШреЛрдВ
  11. рдЕрдВрддрд░реНрдЧрдд_рддреЛ: рдЪрд░рд┐рддреНрд░,: рдмрд╣реБрд░реВрдкреА => рд╕рддреНрдп :: рдЖрд╢реНрд░рд┐рдд =>: рдирд╖реНрдЯ
  12. # рдиреЗрд╕реНрдЯреЗрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
  13. рд╕реНрд╡реАрдХрд╛рд░реЗрдВ_рдиреНрдпрд╛рдпрд╛рдЪрд┐рдд_рдкрддреНрд░рд┐рдХрд╛рдПрдБ_рд░реВрдк: рд╡рд░реНрдг
  14. # рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ
  15. рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╣рд░рд╛рдпрд╛
  16. character_type == "рдЧреНрд░рд╛рд╣рдХ"
  17. рдЕрдВрдд
  18. рдХрд╛рд░реНрдпрдкрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╣рд░рд╛рдпрд╛?
  19. character_type == "рдХрд╛рд░реНрдпрдХрд╛рд░реА"
  20. рдЕрдВрдд
  21. рдЕрдВрдд
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣рд╛рдБ рд╣рдордиреЗ attr_accessible, рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рддреНрдпрд╛рдкрди, рдкрдВрдЬреАрдХреГрдд рд╕рдВрдШреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП_nested_attributor_for рдореЗрдВ рдирдП рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗред
Attr_accessible рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛ рдХреЛ рдмреИрдЪреЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХреЗрдВред
рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рди рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдЙрдирдХрд╛ рдкреНрд░рд╛рд░реВрдк рднреА рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ)ред
рдХрд╛рдХрдмреЗ рдмрд╣реБрд░реВрдкреА рдПрд╕реЛрд╕рд┐рдПрд╢рди рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЕрдм рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рдпрд╛ рдХрд▓рд╛рдХрд╛рд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
assepts_nested_attributes_for рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рдлреЙрд░реНрдо рдмрдирд╛ рд╕рдХреЗрдВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрд╕рд╛ рд░реВрдк рдЬрд┐рд╕рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рд╕рдмрдлреЙрд░реНрдо рдПрдореНрдмреЗрдбреЗрдб рд╣реИ (рдЕрд░реНрдерд╛рдд, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдпрд╛ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рд▓рд┐рдП)ред
рдЕрдВрдд рдореЗрдВ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╕рд┐рд░реНрдл рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИред

рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо 2 рдореЙрдбрд▓ рдмрдирд╛рдПрдВрдЧреЗ: рдЧреНрд░рд╛рд╣рдХ рдФрд░ рдХрд╛рд░реНрдпрдХрд╛рд░реАред рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдкрд╛рд╕рд╡рд░реНрдб, рдЙрдкрд╕реНрдерд┐рддрд┐, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рдореЙрдбрд▓реЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  1. has_one: user ,: as =>: character ,: рдЖрд╢реНрд░рд┐рдд =>: рдирд╖реНрдЯ
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВрдиреЗ user_observer (рд░реЗрд▓ g рдСрдмреНрдЬрд╝рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рднреА рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдореИрдВрдиреЗ рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ:
  1. рдХреНрд▓рд╛рд╕ рдпреВрдЬрд░рдСрдмреНрдЬрд░реНрд╡рд░ <ActiveRecord :: рдСрдмреНрдЬрд░реНрд╡рд░
  2. def_create (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рд╕реЗ рдкрд╣рд▓реЗ
  3. build_character_for рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
  4. рдЕрдВрдд
  5. рдирд┐рдЬреА
  6. def build_character_for (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛)
  7. user.character = user.character_type.classify.constantize.create!
  8. рдЕрдВрдд
  9. рдЕрдВрдд
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ config / application.rb рдореЗрдВ рдЬреЛрдбрд╝рд╛:
  1. config.active_record.observers =: user_observer
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдХреМрди рдмрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд░реЗрдбрд┐рдпреЛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрдпрдирд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЙрдиреНрд╣реЗрдВ "рдЧреНрд░рд╛рд╣рдХ" рдпрд╛ "рдХрд╛рд░реНрдпрдХрд╛рд░реА" рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдпрд╛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдЕрдЧрд░ user.character_type == "рдЧреНрд░рд╛рд╣рдХ"
  2. user.character = Customer.create!
  3. рдЕрдиреНрдпрдерд╛
  4. user.character = Executive.create!
  5. рдЕрдВрдд
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд▓рдВрдмрд╛ рдФрд░ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд╕рд╣рдордд рд╣реИрдВред

Devise'om рдХреЗ рд╕рд╛рде, рдЕрдм рдЖрдк Canan рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рднреА рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рдпрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
  1. рд╡рд░реНрдЧ рдХреА рдХреНрд╖рдорддрд╛
  2. рдХреИрдиреИрди рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ :: рдпреЛрдЧреНрдпрддрд╛
  3. рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдирд╛ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛)
  4. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ || = рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирдИ
  5. рдЕрдЧрд░ user.admin? # рдПрдбрдорд┐рди рдЕрдХрд╛рдЙрдВрдЯ
  6. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдкреНрд░рдмрдВрдзрди, рд╕рдм
  7. рдЕрдиреНрдпрдерд╛
  8. рдЕрдЧрд░ user.customer # рдЧреНрд░рд╛рд╣рдХ рдЦрд╛рддрд╛
  9. # рд░реЗрд╕реНрдЯрдлреБрд▓
  10. рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
  11. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдмрдирд╛рдПрдБ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
  12. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрджреНрдпрддрди, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝,: customer_id => user.character.id
  13. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдкрдврд╝реЗрдВ, рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ
  14. # рд╕рдВрдЧреНрд░рд╣
  15. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╡реНрдпрдХреНрддрд┐рдЧрдд, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
  16. elsif user.existent? # рдХрд╛рд░реНрдпрдХрд╛рд░реА рдЦрд╛рддрд╛
  17. # рд░реЗрд╕реНрдЯрдлреБрд▓
  18. рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
  19. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдкрдврд╝реЗрдВ, рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ
  20. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдмрдирд╛рдПрдБ, рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ
  21. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ [: рдЕрджреНрдпрддрди,: рдирд╖реНрдЯ], рдЯрд┐рдкреНрдкрдгреА,: Executive_id => user.character.id
  22. # рд╕рджрд╕реНрдп
  23. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
  24. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЫреБрдЯреНрдЯреА, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
  25. # рд╕рдВрдЧреНрд░рд╣
  26. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдбреНрд░рд╛рдлреНрдЯ, рдЯрд┐рдкреНрдкрдгреА
  27. рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рдВрдЧреНрд░рд╣, рдЯрд┐рдкреНрдкрдгреА
  28. рдЕрдВрдд
  29. рдЕрдВрдд
  30. рдЕрдВрдд
  31. рдЕрдВрдд
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЪрд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рджреЛрдиреЛрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдФрд░ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдирд┐рдпрдВрддреНрд░рдХ / рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдЕрдм рджреЗрдЦрдиреЗ рдореЗрдВ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдЬреАрд╡рди рд╕реНрд╡рд░реНрдЧ рдЬреИрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ред
  1. рдЕрдЧрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ : join, @document
  2. = link_to "рдЬреБрдбрд╝реЗрдВ", [: join, @document]
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдм рдХреЗрд╡рд▓ рдКрдкрд░ рдХреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ "рдЬреЙрдЗрди" рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ рд╣реИред

рдЗрд╕ рддрд░рд╣, рдЖрдк рд╕рд╛рдЗрдЯ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреАред

рдЕрдм рд╕рдВрдШреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж: рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдШ рдЕрдм рдЧреНрд░рд╛рд╣рдХ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрдирдХрд░реНрддрд╛ рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд▓рдЪреАрд▓рд╛рдкрди рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдЦ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ: рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрдм рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рд╕рдВрдШреЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЫреЗрдж рдореЗрдВ рдХрдЯреНрдЯрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ:
github.com/plataformatec/devise
github.com/ryanb/cancan
habrahabr.ru/blogs/ror/79431

Source: https://habr.com/ru/post/In118035/


All Articles