рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ 3 - рдлрд╛рдЗрдирд▓ рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреНрд╕

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛

  1. рд░реЗрд▓ 3.0 рдХреА рдУрд░ рдкрд▓рд╛рдпрди
    • рд░реЗрд▓ 3 рдХреЛ рд░реВрдмреА 1.8.7+ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
    • рд░реЗрд▓ рдореЗрдВ рдЖрд╡реЗрджрди рд╡рд╕реНрддреБ
    • script/*



      script/rails



      рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
    • рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ config.gem



    • рд╕рдВрдХреНрд░рдордг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
  2. рд░реЗрд▓ 3.0 рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг
    • рд░рддреНрдиреЛрдВ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢
    • рдЬреАрд╡рди рдХрдЧрд╛рд░ рдкрд░ рд╣реИ
  3. рд╡рд╛рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди
    • Cooldown Railties
    • рд╕рднреА рд░реЗрд▓ рдХреЛрд░ рдШрдЯрдХ рдЕрдм рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ
    • рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдЕрдореВрд░реНрдд
    • рдирд┐рдпрдВрддреНрд░рдХ рдЕрдореВрд░реНрдд
    • рдЕрд░рд┐рд▓ рдПрдХрддрд╛
    • рдореЗрд▓ рдирд┐рдХрд╛рд▓реЗрдВ
  4. рдкреНрд░рд▓реЗрдЦрди
  5. рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг
  6. Railties
  7. рдПрдХреНрд╢рди рдкреИрдХ
    • рд╕рд╛рд░ рдирд┐рдпрдВрддреНрд░рдХ
    • рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ
    • рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░реЗрд╖рдг
    • рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рджреГрд╢реНрдп
  8. рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓
    • ORM рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдФрд░ рдПрдХреНрд╢рди рдкреИрдХ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕
    • рд╕рддреНрдпрд╛рдкрди
  9. рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб
    • рдХреНрд╡реЗрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕
    • рд╕реБрдзрд╛рд░
    • рдкреИрдЪ рдФрд░ рдкрджрд╛рд╡рдирдд рд╡рд┐рдзрд┐рдпрд╛рдБ
  10. рд╕рдХреНрд░рд┐рдп рд╕рдВрд╕рд╛рдзрди
  11. рд╕рдХреНрд░рд┐рдп рд╕рдорд░реНрдерди
  12. рдПрдХреНрд╢рди рдореЗрд▓рд░реНрд╕
  13. рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдкрд░рд┐рдЪрдп



рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ 3.0 рд░рд┐рд▓реАрдЬ рд╣реЛ рдЧрдИ рд╣реИ! рд╡рд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд░рд╛рдд рдХрд╛ рдЦрд╛рдирд╛ рдмрдирд╛рдПрдЧрд╛ рдФрд░ рд▓рд┐рдиреЗрди рдХреЗ рд╕рд╛рде рд╡реЙрд╢рд┐рдВрдЧ рдорд╢реАрди рднрд░ рджреЗрдЧрд╛ред рдЖрдк рдЕрднреА рднреА рд╣реИрд░рд╛рди рд╣реЛрдВрдЧреЗ рдХрд┐ рдЖрдк рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рд░рд╣рддреЗ рдереЗред рдпреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд░реЗрд▓ рд╣реИрдВ!



рд▓реЗрдХрд┐рди рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдмреЛрд▓рдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рдереАред рдЯреАрдо рдореЗрдВ рдореЗрд░рдм рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдЙрдирдХреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рдж рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛, рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рдХрд┐рдпрд╛, рдФрд░ рдХреБрдЫ рдирдП рдПрдкреАрдЖрдИ рднреА рдЬреЛрдбрд╝реЗред рдЕрдЧрд░ рдЖрдк Rb 3.0 рдХреЛ Merb 1.x рдХреЗ рд╕рд╛рде рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдЖрдкрд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреАред рдФрд░ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реЗрд▓реНрд╕ 3.0 рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрдврд╝рддреЗ рд╣реБрдП 2.xред



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



рдпреЗ рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрдЧрд┐рдлреНрдЯ рдпрд╛ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрд▓ 3.0 рдореЗрдВ 1,600 рд╕реЗ рдЕрдзрд┐рдХ рд▓реЗрдЦрдХреЛрдВ рд╕реЗ рд▓рдЧрднрдЧ 4,000 рдЖрд╡рд╛рдЧрдорди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ! рдпрджрд┐ рдЖрдкрдХреЛ рдЫреЛрдЯреА рд╕реЗ рдЫреЛрдЯреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдЬрд╛рдирдирд╛ рд╣реИ, рддреЛ рд╕рднреА рдХрдорд┐рдЯ рдХреА рд╕реВрдЪреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред



1. рд░реЗрд▓ 3 рдХреЛ рд╕рдВрдХреНрд░рдордг



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



1.1 рд░реЗрд▓ 3.0 рдХреЛ рд░реВрдмреА 1.8.7+ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ



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



рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд░реВрдмреА 1.8.7 p248 рдФрд░ p249 рдореЗрдВ рд░реЗрд▓рд┐рдВрдЧ 3.0 рдХреЛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреАрдбрд╝реЗ рд╣реИрдВред рд░реВрдмреА рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг 1.8.7-2010.02 рдХреЗ рдмрд╛рдж рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 1.9 рдХреЗ рд▓рд┐рдП, рд░реВрдмреА 1.9.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд░реЗрд▓ 3.0 рдореЗрдВ, рдпрд╣ рд╡рд┐рднрд╛рдЬрди рддреНрд░реБрдЯрд┐рдпреЛрдВ (segfaults) рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рд░реВрдмреА 1.9 рдХреА рд░реЗрд▓ 3.0 рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рддреБрд░рдВрдд 1.9.2 рдкрд░ рдЬрд╛рдПрдВред



1.2 рдЖрд╡реЗрджрди рд╡рд╕реНрддреБ



рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд░реЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд░реЗрд▓ 3.0 рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ Application



рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рдпрд╣ рд░реЗрд▓реНрд╕ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ / рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдорд╛рди рд╣реИред



рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ Application



рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ config / application.rb рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЗрд▓ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ config / environment.rb рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЙрдкреА рдХрд░реЗрдВред



1.3 script/*



script/rails



рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд



рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рд░реЗрд▓ рдЕрдм рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕реАрдзреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рд░реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдЯ рд╕реЗ rails



рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ, рдЬреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

rails console # => ./script/console

rails g scaffold post title:string # => ./script/generate scaffold post title:string





rails тАУhelp



рдХрдорд╛рдВрдб рдЖрдкрдХреЛ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред



1.4 рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ config.gem





config.gem



рд╡рд┐рдзрд┐ bundler



'рдП рдФрд░ Gemfile



' (рджреЗрдЦреЗрдВ "рдиреАрдЪреЗ рдЬрд╡рд╛рд╣рд░рд╛рдд рд╕рдХреНрд╖рдо рдХрд░рдиреЗ) рдХреЗ рдкрдХреНрд╖ рдореЗрдВ Gemfile



рдЧрдИ рд╣реИ"



1.5 рд╕рдВрдХреНрд░рдордг рдкреНрд░рдХреНрд░рд┐рдпрд╛



рд╕рдВрдХреНрд░рдордг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдФрд░ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд░реЗрд▓ рдЕрдкрдЧреНрд░реЗрдб ред



рдмрд╕ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ $ rake rails:upgrade:check



рдЪрд▓рд╛рдПрдВ $ rake rails:upgrade:check



рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдореМрдЬреВрджрд╛ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рдЕрджреНрдпрддрди рдХрд░реЗрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд▓рдЧрдЗрди рдореЗрдВ Gemfile



рдореЗрдВ рдореМрдЬреВрджрд╛ рдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Gemfile



рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рд╣реИред рдкреНрд▓рдЧрдЗрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВ - $ script/plugin install git://github.com/rails/rails_upgrade.git



ред



рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрд▓ рдЕрдкрдЧреНрд░реЗрдб рджреЗрдЦреЗрдВ рдЕрдм рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдВрдХ рд╣реИред



рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЖрдИрдЖрд░рд╕реА рдЪреИрдирд▓ рдкрд░ рдпрд╛ рд░реВрдмреНрдпреЙрдирд┐рд▓реНрд╕-рдЯреЙрдХ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдЬреИрд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╢рд╛рдпрдж рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬрдм рдЖрдк рдЕрдВрддрддрдГ рд╕рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ - рддреЛ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рд▓рд┐рдЦрдирд╛ рди рднреВрд▓реЗрдВ!



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - рд░реЗрд▓ рдкрде 3: рдЙрдиреНрдирдпрди рдХрд╛ рдЕрдиреБрдореЛрджрди ред



2. рдПрдХ рдирдИ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛



рдЗрд╕ рд╕рдордп рдЕрдиреБрдХреНрд░рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

$ gem install rails --version 3.0.0

$ rails myapp

$ cd myapp




реи.рез рд░рддреНрдиреЛрдВ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢



рд░реЗрд▓ рдЕрдм рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Gemfile



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдмрдВрдбрд▓ рдордгрд┐ рд╣реИ рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд░рддреНрдиреЛрдВ рдХреЛ vendor



рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд┐рд╕реНрдЯрдо рд░рддреНрдиреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - рдмрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ред



реи.реи рдХрдЧрд╛рд░ рдкрд░ рдЬреАрд╡рди



рдЕрдм, рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ "рдлреНрд░реАрдЬ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Gemfile



рдФрд░ Gemfile



рдХреЛ рдзрдиреНрдпрд╡рд╛рдж, рдмрд╕ рд╡рд┐рд╢реЗрд╖ рдХрдорд╛рдВрдб bundle



-ra рдХреЛ рдЪрд▓рд╛рдПрдВ - рдЕрд▓рд╡рд┐рджрд╛ rake freeze



! ..



рдареАрдХ рд╣реИ, рдпрджрд┐ рдЖрдк рд░реЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл --dev



рдзреНрд╡рдЬ рдкрд╛рд╕ рдХрд░реЗрдВ:

$ rails myapp тАФedge



3. рд░реЗрд▓ рдореЗрдВ рд╡рд╛рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди



рд░реЗрд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ 6 рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВред



3.1 рд░реЗрд▓рд┐рдВрдЧ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛



рд░реЗрд▓рд┐рдВрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЬреЗрдирд░реЗрдЯрд░ рдФрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП, рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд▓рд╛рд▓рд┐рддреНрдп рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрддрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред



3.2 рд╕рднреА рд░реЗрд▓ рдХреЛрд░ рдШрдЯрдХ рдЕрдм рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ



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



рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдХрд░реНрдиреЗрд▓ рдШрдЯрдХ рдХреЗ рдкреНрд▓рдЧ-рдЗрди рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DataMapper рдпрд╛ Sequel) рдХреА рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╕реБрдзрд╛рд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рдеред



рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА - рдорд╣рд╛рди Decoupling



3.3 рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдЕрдореВрд░реНрддрддрд╛



рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХреНрд╢рди рдкреИрдХ рд╕реЗ рд╕рднреА рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдерд╛ред рдЕрдм рдпрд╣ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдирдП рдУрдЖрд░рдПрдо рдкреНрд▓рдЧрдЗрди рдХреЛ рдПрдХреНрд╢рди рдкреИрдХ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - ActiveModel: рдХрд┐рд╕реА рднреА рд░реВрдмреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ ActiveRecord рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ



3.4 рд╕рд╛рд░ рдирд┐рдпрдВрддреНрд░рдХ



рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд╛ рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTTP рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдерд╛, рдЖрджрд┐ред рдирд┐рдпрдВрддреНрд░рдХред



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - рд░реЗрд▓ рдПрдЬ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ ред



3.5 рдПрд░реАрдПрд▓ рдПрдХреАрдХрд░рдг



Arel (рдпрд╛ Active Relation) рдХреЛ рдПрдХреНрдЯрд┐рд╡ рд░рд┐рдХреЙрд░реНрдб рдХреА рдиреАрдВрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдм рдпрд╣ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрд░реЗрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдореВрд░реНрдд рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд╕рдВрдмрдВрдз рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - рдореИрдВрдиреЗ рдЖрд░рд┐рд▓ рдХреЛ рдХреНрдпреЛрдВ рд▓рд┐рдЦрд╛ ред



3.6 рдореЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛



рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджрд┐рди рд╕реЗ, рдПрдХреНрд╢рди рдореЗрд▓рд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрджрд┐рдЧреНрдз рдкреИрдЪ, рдкреНрд░реА-рдкрд░реНрд╕рд░реНрд╕ рдХреЗ рд╕рд╛рде рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░, рдЯреАрдПрдордИрдПрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд▓ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯ рдорд┐рд▓реЗред рд╕рдВрд╕реНрдХрд░рдг 3.0 рдореЗрдВ, рдИрдореЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрд▓ рдЬреЗрдо рдореЗрдВ рд╕рд╛рд░ рдХрд░ рджреА рдЧрдИ рдереАред рдЗрд╕рдиреЗ рдлрд┐рд░ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдИрдореЗрд▓ рдкрд╛рд░реНрд╕рд░ рд╕реЗ рдПрдХреНрд╢рди рдореЗрд▓рд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред



рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА - рд░реЗрд▓ 3 рдореЗрдВ рдирдпрд╛ рдПрдХреНрд╢рди рдореЗрд▓рд░ рдПрдкреАрдЖрдИ ред



4. рдкреНрд░рд▓реЗрдЦрди



рдПрдкреАрдЖрдИ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдЕрджреНрдпрддрди рд╣реЛрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд░реЗрд▓реНрд╕ рдПрдЬ рдЧрд╛рдЗрдб рдХреЛ рд░реЗрд▓ 3.0 рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, guide.rubyonrails.org рдкрд░ рдЧрд╛рдЗрдб рдХреЗрд╡рд▓ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг (рдпрд╛рдиреА рд╕рдВрд╕реНрдХрд░рдг 2.3.5, рдЕрдВрддрд┐рдо рд░рд┐рд▓реАрдЬ 3.0 рддрдХ) рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдВрдЧреЗред



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - рд░реЗрд▓рд┐рдЧреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд░реЗрд▓ ред



5. рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг



рд░реЗрд▓ 3 рдореЗрдВ, рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред I18n рдордгрд┐ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрддрд┐ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - рд░реЗрд▓ 3 I18n рдкрд░рд┐рд╡рд░реНрддрди ред



6. рд░реЗрд▓



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



рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╕рдордп, Gemfile



рдХреЛ рд╡рд░реНрддрдорд╛рди рд░реЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред rails тАУhelp



рд▓рд┐рдП rails тАУhelp



рджреЗрдЦреЗрдВред



рд╡рд┐рднрд┐рдиреНрди рд░реЗрд▓реЛрдВ рдХреЗ рдЬрдирд░реЗрдЯрд░реЛрдВ рдиреЗ рдмрд╣реБрдд рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрддреНрдкрдиреНрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рднреА рдХреБрдЫ рд╡реГрджреНрдзрд┐ рдорд┐рд▓реА: рдЕрдВрдд рдореЗрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдП:

рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд: PLUGIN/rails/tasks



рдФрд░ PLUGIN/tasks



рдЕрдм рд▓реЛрдб рдирд╣реАрдВ PLUGIN/tasks



- рд╕рднреА рдХрд╛рд░реНрдп PLUGIN/lib/tasks



рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА :



7. рдПрдХреНрд╢рди рдкреИрдХ



рдПрдХреНрд╢рди рдкреИрдХ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣реНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВред



7.1 рд╕рд╛рд░ рдирд┐рдпрдВрддреНрд░рдХ



Action Controller



рдП рд╕реЗ Abstract Controller



, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЕрдм рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ, partial



, helper



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



рдЕрдм рдмрд╕ Abstract Controller



рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВ, рдореЗрд▓ рд░рддреНрди рдХреЗ рд░реВрдк рдореЗрдВ Rails DSL рдкрд░ рдПрдХ рдЖрд╡рд░рдгред



Abstract Controller



рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рд╕рдВрднрд╡ рдерд╛, рдЙрд╕реЗ рдбрд╛рд▓рдХрд░ Action Controller



Abstract Controller



рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛ рд╣реБрдИ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реАрдзреЗ Abstract Controller



рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рдПрдВрдЧреЗ, рдпрд╣ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИред



рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА - рд░реЗрд▓ рдПрдЬ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ ред



7.2 рдПрдХреНрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░

рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд: рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:

7.3 рдПрдХреНрд╢рди рдбрд┐рд╕реНрдкреИрдЪ



рд░реЗрд▓ 3.0 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдпрд╣ рдирдпрд╛ рдШрдЯрдХ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдкреНрд░рдЪрд▓рд┐рдд map



рдХрдорд╛рдВрдб рдЕрднреА рднреА рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди 3.1 рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд:

рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:

7.4 рдПрдХреНрд╢рди рджреГрд╢реНрдп



7.4.1 рд╡рд┐рдиреАрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ



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



рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╕рднреА remote_



рдХреЛ рд░реЗрд▓ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╡реЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк remote_



рд╣реЗрд▓реНрдкрд░ рдореЗрдВ рд╣реИрдВред рдЕрдм, рдпреВрдЬреЗрдПрд╕ рд╣реБрдХ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдкрд╛рд╕ рдХрд░реЗрдВ :remote => true



ред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

form_for @post, :remote => true





рд▓реМрдЯреЗрдЧрд╛:

form action="http://host.com" id="create-post" method="post" data-remote="true"







7.4.2 рдмреНрд▓реЙрдХ рд╣реЗрд▓реНрдкрд░реНрд╕



form_for



рдпрд╛ div_for



рдЬреИрд╕реЗ form_for



рдЬреЛ рдХрд┐рд╕реА рдмреНрд▓реЙрдХ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЕрдм <%=



: рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

<%= form_for @post do |f| %>

...

<% end %>








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



cache



рдФрд░ content_for



рдЬреИрд╕реЗ рдЕрдиреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ, рдЕрдЫреВрддреЗ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВред



7.4.3 рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди

8 рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓



рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рд░реЗрд▓ 3.0 рдХрд╛ рдПрдХ рдирдпрд╛ рдШрдЯрдХ рд╣реИред рдЕрдм рдХреЛрдИ рднреА ORM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░реЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡рд╣ рд╣реИ рдПрдХреНрдЯрд┐рд╡ рдореЙрдбрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЕрдореВрд░реНрдд рдкрд░рдд рд╣реИред



8.1 рдУрдЖрд░рдПрдо рдЕрдореВрд░реНрдд рдФрд░ рдПрдХреНрд╢рди рдкреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕



рд░реЗрд▓ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХреНрд╢рди рдкреИрдХ рд╕реЗ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд╕рднреА рд▓рд┐рдВрдХ рдирд┐рдХрд╛рд▓рдирд╛ рдерд╛ред рдЕрдм рдпрд╣ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдУрдЖрд░рдПрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рд┐рд░реНрдл рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА - ActiveRecord рдХреА рддрд░рд╣ рдХрд┐рд╕реА рднреА рд░реВрдмреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ



рдорд╛рдиреНрдпрддрд╛рдПрдБ 8.2



рдорд╛рдиреНрдпрддрд╛ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдИ, рдЬрд┐рд╕рд╕реЗ рдЕрдиреНрдп ORM рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдкрдирд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред



рдЕрдм рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ validates :attribute, options_hash



ред



рдЖрдк options_hash



рдПрдХ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:рдзреНрдпрд╛рди рджреЗрдВ: рдкрд┐рдЫрд▓реЗ рд╕рднреА рд╕рддреНрдпрд╛рдкрди рдЕрднреА рднреА рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдирдИ рд╢реИрд▓реА рдкреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝ (рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ) рд╣реИред



рдЖрдк рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ ActiveModel рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
class TitleValidator < ActiveModel::EachValidator

Titles = ['Mr.', 'Mrs.', 'Dr.']



def validate_each(record, attribute, value)

unless Titles.include?(value)

record.errors[attribute] << 'must be a valid title'

end

end

end



class Person

include ActiveModel::Validations



attr_accessor :title

validates :title, :presence => true, :title => true

end







рдпрд╛ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП:
class Person < ActiveRecord::Base

validates :title, :presence => true, :title => true

end









рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА :

9. рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб



рд░реЗрд▓ 3 рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдмрд╣реБрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛, Arel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрд╡реЗрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рд╕рддреНрдпрд╛рдкрди рдореЗрдВ рдЕрдкрдбреЗрдЯ рдФрд░ рдХрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиред рд░реЗрд▓ 2.x рд╕реЗ рд╕рднреА рдЕрдкреНрд░рдЪрд▓рд┐рдд рдПрдкреАрдЖрдИ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд░реЗрд▓ 3.1 рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ред



9.1 рдЕрдиреБрд░реЛрдз рдЗрдВрдЯрд░рдлрд╝реЗрд╕



рдПрдХреНрдЯрд┐рд╡ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдХреЛрдИ рднреА рд╡рд┐рдзрд┐, Arel рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдм рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ relation



ред рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдХреЛ рд░реЗрд▓ 3.1 рдореЗрдВ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд░реЗрд▓ 3.2 рдореЗрдВ рдврд╛рдВрдЪреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдВрдЬреАрд░реЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдирдП рддрд░реАрдХреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ: рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА :


9.2 рдЕрдиреНрдп рд╕реБрдзрд╛рд░





9.3 рдкреИрдЪ рдФрд░ рд╕рдорд░реНрдерди рдХреА рд╕рдорд╛рдкреНрддрд┐



рд╢реАрд░реНрд╖ рдкрд░, рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВ: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рдЬрд╛рдиреА рдереА: рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рддрдерд╛рдХрдерд┐рдд рд░реЗрд▓ рдорд╢реАрди 3.0 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред



10. рд╕рдХреНрд░рд┐рдп рд╕рдВрднреЛрдЧ



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

рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд:

11. рд╕рдХреНрд░рд┐рдп рд╕рдорд░реНрдерди



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

рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдм рд░реВрдмреА 1.8.7 рдФрд░ рд░реВрдмреА 1.9 рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ: рд╕реБрд░рдХреНрд╖рд╛ рдкреИрдЪ REXML рдПрдХреНрдЯрд┐рд╡ рд╕рдкреЛрд░реНрдЯ рдореЗрдВ рд░рд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рд░реВрдмреА 1.8.7 рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрднреА рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рдХреНрд░рд┐рдп рд╕рдорд░реНрдерди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХрдм рдирд╣реАрдВред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдЙрдирдХреА рдмреЗрдХрд╛рд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

12. рдПрдХреНрд╢рди рдореЗрд▓рд░



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

рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА :

13. рдкреНрд░рддрд┐рднрд╛рдЧреА



рдЙрди рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦреЗрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХрдИ рдШрдВрдЯреЛрдВ рддрдХ рд░реЗрд▓ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИред 3. рдЙрди рд╕рднреА рдХрд╛ рд╕рдореНрдорд╛рди рдФрд░ рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░реЗрдВ!



рдкреБрдирд╢реНрдЪред рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рд╕рд╛рде рд╣реА рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИред

рдкреА рдкреА рдПрд╕ред рдореБрдЭреЗ рдХреАрдбрд╝реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж !



All Articles