рдХреИрд╕реЗ рддреЗрдЬреА рд╕реЗ рджреЛ рдмрд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП relate_to рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (database_validations рд░рддреНрди)

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде db_belongs_to рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп db_belongs_to рдмрдЬрд╛рдп db_belongs_to рд╕реЗред


рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ ORM ActiveRecord рдХреЗ belongs_to рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдореЙрдбрд▓ рдореЗрдВ belongs_to рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рднреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ belongs_to рдкрд╛рд╕ optional: false рд░реВрдк рд╕реЗ optional: false рд╡рд┐рдХрд▓реНрдк рд╣реИ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдирдИ рд╡рд╕реНрддреБ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд SQL SELECT рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг


 class User < ActiveRecord::Base belongs_to :company belongs_to :country end user = User.first user.update(some_field: 'something') #        SELECT,  ,   `company`  `country`  

рдЖрдкрдХреЛ рдпрд╣ рднреА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдЦрдВрдбрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рдмрд╛рдж рдореЗрдВ (рдмрд╛рдж рдореЗрдВ рдпрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ) рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 user.update(...) user.company.destroy! =>     ,  ,          ,       (     ) 

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдмрд╛рдзрд╛ рдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдмрд╛рдж, рдЖрдк рд╣рдореЗрд╢рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрдиреЗрдХреНрд╢рди рдореМрдЬреВрдж рд╣реИред


рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓реЗрдХреНрдЯ рдХреНрд╡реЗрд╢реНрдЪрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдмрдирд╛рдП рд░рдЦреА рдЬрд╛рдПрдЧреА (рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдмрд╛рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)?


рдЬрд╡рд╛рдм рдЖрд╕рд╛рди рд╣реИ - рдХреЛрдИ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ ActiveRecord::InvalidForeignKey рдЕрдкрд╡рд╛рдж рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рддрдм рдорд┐рд▓рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЧрд╛рдпрдм рдПрдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ belongs_to to рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдХрд┐ errors рдореЗрдВ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред


рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдирд╣реАрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕_рд╡рд▓рд┐рдбреЗрдВрд╕ рдордгрд┐ рдХрд╛рдо рдЖрдПрдЧрд╛ред рдЗрд╕ рдордгрд┐ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА db_belongs_to рд╢рд╛рдорд┐рд▓ рдерд╛, рдЬрд┐рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ ( рд╣рдм рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ ) рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдФрд░ рдЕрдм db_belongs_to , рдЬрд┐рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред db_belongs_to рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред


рд╡рд┐рдзрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪреАрдЬреЗрдВ рдХрд░рддреА рд╣реИ:


  • рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реА рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдмрд╛рдзрд╛ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ;
  • рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреА рд╡рд╕реНрддреБ рдХреА errors рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
  • рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ;

рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ database_validations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕ рд░рддреНрди рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рд╛рдмрд┐рдд рд╣реБрдЖ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрддрдирд╛ рд╣реА рдЖрдк рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ , рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рджреЗрдЦреЗрдВред


рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реИрдВ!

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


All Articles