рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
- рд░реЗрд▓ 3.0 рдХреА рдУрд░ рдкрд▓рд╛рдпрди
- рд░реЗрд▓ 3 рдХреЛ рд░реВрдмреА 1.8.7+ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рд░реЗрд▓ рдореЗрдВ рдЖрд╡реЗрджрди рд╡рд╕реНрддреБ
script/*
script/rails
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд- рдирд┐рд░реНрднрд░рддрд╛ рдФрд░
config.gem
- рд╕рдВрдХреНрд░рдордг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
- рд░реЗрд▓ 3.0 рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг
- рд░рддреНрдиреЛрдВ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢
- рдЬреАрд╡рди рдХрдЧрд╛рд░ рдкрд░ рд╣реИ
- рд╡рд╛рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди
- Cooldown Railties
- рд╕рднреА рд░реЗрд▓ рдХреЛрд░ рдШрдЯрдХ рдЕрдм рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ
- рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдЕрдореВрд░реНрдд
- рдирд┐рдпрдВрддреНрд░рдХ рдЕрдореВрд░реНрдд
- рдЕрд░рд┐рд▓ рдПрдХрддрд╛
- рдореЗрд▓ рдирд┐рдХрд╛рд▓реЗрдВ
- рдкреНрд░рд▓реЗрдЦрди
- рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг
- Railties
- рдПрдХреНрд╢рди рдкреИрдХ
- рд╕рд╛рд░ рдирд┐рдпрдВрддреНрд░рдХ
- рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ
- рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░реЗрд╖рдг
- рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рджреГрд╢реНрдп
- рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓
- ORM рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдФрд░ рдПрдХреНрд╢рди рдкреИрдХ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕
- рд╕рддреНрдпрд╛рдкрди
- рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб
- рдХреНрд╡реЗрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕
- рд╕реБрдзрд╛рд░
- рдкреИрдЪ рдФрд░ рдкрджрд╛рд╡рдирдд рд╡рд┐рдзрд┐рдпрд╛рдБ
- рд╕рдХреНрд░рд┐рдп рд╕рдВрд╕рд╛рдзрди
- рд╕рдХреНрд░рд┐рдп рд╕рдорд░реНрдерди
- рдПрдХреНрд╢рди рдореЗрд▓рд░реНрд╕
- рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд░рд┐рдЪрдп
рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ 3.0 рд░рд┐рд▓реАрдЬ рд╣реЛ рдЧрдИ рд╣реИ! рд╡рд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд░рд╛рдд рдХрд╛ рдЦрд╛рдирд╛ рдмрдирд╛рдПрдЧрд╛ рдФрд░ рд▓рд┐рдиреЗрди рдХреЗ рд╕рд╛рде рд╡реЙрд╢рд┐рдВрдЧ рдорд╢реАрди рднрд░ рджреЗрдЧрд╛ред рдЖрдк рдЕрднреА рднреА рд╣реИрд░рд╛рди рд╣реЛрдВрдЧреЗ рдХрд┐ рдЖрдк рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рд░рд╣рддреЗ рдереЗред рдпреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд░реЗрд▓ рд╣реИрдВ!
рд▓реЗрдХрд┐рди рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдмреЛрд▓рдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рдереАред рдЯреАрдо рдореЗрдВ рдореЗрд░рдм рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдЙрдирдХреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рдж рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛, рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рдХрд┐рдпрд╛, рдФрд░ рдХреБрдЫ рдирдП рдПрдкреАрдЖрдИ рднреА рдЬреЛрдбрд╝реЗред рдЕрдЧрд░ рдЖрдк Rb 3.0 рдХреЛ Merb 1.x рдХреЗ рд╕рд╛рде рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдЖрдкрд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреАред рдФрд░ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реЗрд▓реНрд╕ 3.0 рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрдврд╝рддреЗ рд╣реБрдП 2.xред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХреЛрдб рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рднреА рдЖрдкрдХреЛ рд░реЗрд▓ 3.0 рдХрд╛ рд╕реНрд╡рд╛рдж рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдордиреЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдЕрджреНрдпрддрди рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рд░реЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдмрдирдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ:
- рдПрдХрджрдо рдирдпрд╛ рд░реИрд╕реНрдЯрдлреБрд▓-рд╕реНрдЯрд╛рдЗрд▓ рд░рд╛рдЙрдЯрд░;
- рдПрдХреНрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдЫрд╡рд┐ рдФрд░ рд╕рдорд╛рдирддрд╛ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдПрдХреНрд╢рди рдореЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдПрдкреАрдЖрдИ (рдЕрдм рд╕реЗ рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдмрд┐рдирд╛ рдирд╛рд░рдХреАрдп);
- рд╕рдВрдмрдВрдзрдкрд░рдХ рдмреАрдЬрдЧрдгрд┐рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдорд┐рдд, рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдПрдХ рдХреНрд╡реЗрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛;
- рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, jQuery рдФрд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдиреАрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣рд╛рдпрдХреЛрдВ, рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЕрдиреНрдп рдЪреМрдЦрдЯреЗ (рдЗрдирд▓рд╛рдЗрди рдЬреЗрдПрд╕ рдХреЗ рдЕрдВрдд);
- рдмреБрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдиред
рдЗрди рд╕рднреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдПрдкреАрдЖрдИ рдХреЛ рдЕрд▓рдЧ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╡рд┐рд╢реЗрд╖ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд┐рдПред рдпрд╛рдиреА рдЕрдм рд░реЗрд▓ 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) рдХреА рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╕реБрдзрд╛рд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рдеред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА -
рдорд╣рд╛рди Decoupling3.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 рдордгрд┐ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрддрд┐ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИред
- рд╣рд░ рдШрд░ рдореЗрдВ I18n - рдЕрдм, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ L18n рдХреЛ ActiveModel :: рдЕрдиреБрд╡рд╛рдж рдФрд░ ActiveModel :: Validations рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдкреНрд░рдкрддреНрд░ рдЯреИрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдмрдирд╛рдПрдВ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ), рд╕рд╣реА рдЕрдиреБрд╡рд╛рдж рднрд╛рд╖рд╛ рдХреЛ рдХрд╕ рд▓реЗрдВред
- L18n рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдЯреИрдЧ рдЕрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдкрд╛рд╕ рдХрд░реЗрдВред
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА -
рд░реЗрд▓ 3 I18n рдкрд░рд┐рд╡рд░реНрддрди ред
6. рд░реЗрд▓
рд░реЗрд▓ рдХреЗ рдЕрдВрджрд░ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рд░реЗрд▓рд╡реЗ рдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ, рдЗрдВрдЬрди рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдпрдерд╛рд╕рдВрднрд╡ рджрд░реНрджрдирд╛рдХ рдФрд░ рд▓рдЪреАрд▓рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
- рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдм рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд╛рдорд╕реНрдерд╛рди рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
YourAppName.boot
), рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред - рдЕрдм рдЖрдк
Rails.config
рдУрд░ рд░реБрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред Rails.root/app
рдЕрдВрджрд░ Rails.root/app
рдЕрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ load path
рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдк рдлрд╝рд╛рдЗрд▓ app/observers/user_observer.rb
, рдФрд░ рд░реЗрд▓ рдмрд╕ рдЗрд╕реЗ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреАрдврд╝реА рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдк рдЕрдм рдХрдИ рдирдП рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЭрдВрдбреЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг-рдЗрдХрд╛рдИ, рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдЧрд┐рдЯ рдЬреИрд╕реЗ рдШрдЯрдХреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдП
-dev
рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╕рдордп,
Gemfile
рдХреЛ рд╡рд░реНрддрдорд╛рди рд░реЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
rails тАУhelp
рд▓рд┐рдП
rails тАУhelp
рджреЗрдЦреЗрдВред
рд╡рд┐рднрд┐рдиреНрди рд░реЗрд▓реЛрдВ рдХреЗ рдЬрдирд░реЗрдЯрд░реЛрдВ рдиреЗ рдмрд╣реБрдд рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:
- рдЬрдирд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╡реЗ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдПрдкреАрдЖрдИ рдПрдХ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдереЗред
- рдЬреЗрдирд░реЗрдЯрд░ рдЕрдм рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрде (рд▓реЛрдб рдкрде) рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╕ рдПрдХ рдмреВрдЯ рдкрде (рд░реВрдмреА рд▓реЛрдб рдкрде) рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП
script/generate foo
рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ generators/foo_generator
рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ - рдЕрдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рдирдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди, ORM рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЛ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
- рдирдП рдЬрдирд░реЗрдЯрд░ рдореЗрдВ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдореВрд▓ рдлрд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдмрд╕ рд╡рд╛рдВрдЫрд┐рдд рдлрд╛рдЗрд▓ рдХреЛ
RAILS_ROOT/lib/templates
рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред Rails::Generators::TestCase
, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ Rails::Generators::TestCase
рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрддреНрдкрдиреНрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рднреА рдХреБрдЫ рд╡реГрджреНрдзрд┐ рдорд┐рд▓реА:
- рдЙрддреНрдкрдиреНрди рд╡рд┐рдЪрд╛рд░ рдЕрдм
p
рдмрдЬрд╛рдп div
рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред - рдЬрдм рд╕рдВрдкрд╛рджрди рдФрд░ рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдХреЛрдб рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдбрд╝ рдХреЗ рд╕рд╛рде рдлрд╝реЙрд░реНрдо рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдм рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ
_form
рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬрдм рдордЪрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдлрд╝реЙрд░реНрдо рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ
f.submit
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "ModelName рдмрдирд╛рдПрдБ" рдпрд╛ "ModelName рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ" рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдЕрдВрдд рдореЗрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдП:
rake db:forward
рдЯрд╛рд╕реНрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдХреА рдмрджреМрд▓рдд рдЕрдм рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИредrake routes CONTROLLER=x
рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдм рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд:
Rails.root
рдкрдХреНрд╖ рдореЗрдВ Rails.root
,Rails.env
, Rails.env
рдкрдХреНрд╖ рдореЗрдВ,RAILS_DEFAULT_LOGGER
, RAILS_DEFAULT_LOGGER
рдХреЗ рдкрдХреНрд╖ рдореЗрдВред
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 рдПрдХреНрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░
protect_from_forgery
application_controller.rb
protect_from_forgery
рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реИредcookie_verifier_secret
рд╣рдЯрд╛ cookie_verifier_secret
рдЧрдпрд╛ рд╣реИред рдЕрдм, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ Rails.application.config.cookie_secret
рдУрд░ рд░реБрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ initializers/cookie_verification_secret.rb
рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИредsession_store
рдХреЛ initializers/session_store.rb
рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ initializers/session_store.rb
cookies.secure
рдЕрдм рдХреБрдХреА рд╣реИрд╢ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╡реИрд▓реНрдпреВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: cookie.secure[:key] => value
cookies.permanent
рдЕрдм рдЖрдкрдХреЛ рдХреБрдХреА рд╣реИрд╢ рдореЗрдВ рдирд┐рд░рдВрддрд░ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: cookie.permanent[:key] => value
, рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдЕрд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ- рдЕрдм рдЖрдк
notice => ' flash-'
рднреЗрдЬ notice => ' flash-'
рдпрд╛ :alert => '- '
рд▓рд┐рдП respond_to
рдореЗрдВ format
рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред flash[]
рд╣реИрд╢ рдЕрднреА рднреА рдЪрд╛рд▓реВ рд╣реИ respond_with
рдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд░рд╛рд╕рдд format
рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИActionController::Responder
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд:
filter_parameter_logging
рдХреЗ рдкрдХреНрд╖ рдореЗрдВ config.filter_parameters << :password
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:
7.3 рдПрдХреНрд╢рди рдбрд┐рд╕реНрдкреИрдЪ
рд░реЗрд▓ 3.0 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдпрд╣ рдирдпрд╛ рдШрдЯрдХ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреА рдПрдХ рдордЬрдмреВрдд рд╕рдлрд╛рдИ рдФрд░ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рдмрд╛рдж, рдЕрдм рд╕реЗ
router
рдкрд░ DLS рдкрд░ rack_mount
, рдЕрд░реНрдерд╛рддред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЕрдм рдПрдХ рдЕрд▓рдЧ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ - рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдШреЛрд╖рд┐рдд рд░реВрдЯ рдЕрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВред рдпрд╛рдиреА рдЕрдм рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
ActionController::Routing::Routes.draw do
map.resources :posts
end
рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:AppName::Application.routes do
resources :posts
end
match
рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдк рдПрдХ рдЙрдкрдпреБрдХреНрдд (рдорд┐рд▓рд╛рди) рдорд╛рд░реНрдЧ рдкрд░ рд░реИрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВconstraints
рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИscope
рдореЗрдердб рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдиреЗрдорд╕реНрдкреЗрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдХреНрд░рд┐рдпрд╛рдУрдВ) рдореЗрдВ рд░реВрдЯ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб:
scope 'es' do
resources :projects, :path_names => { :edit => 'cambiar' }, :as => 'projeto'
end
/es/projeto/1/cambiar
рдкрд░ edit
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛- рдЬреЛрдбрд╝рд╛
root
рд╡рд┐рдзрд┐, match '/', :to => path
рд╕реЗ match '/', :to => path
рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ - рдЖрдк
match
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЧрдореЗрдВрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ, match тАЬ/:controller(/:action(/:id))(.:format)тАЭ
, рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХреЛрдИ рднреА рдкрд╛рда рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ - рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЕрдм рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
:home { match '/:action' }
рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдкреНрд░рдЪрд▓рд┐рдд
map
рдХрдорд╛рдВрдб рдЕрднреА рднреА рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди 3.1 рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд:
- рдЧреИрд░-рдЖрд░рдИрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (
/:controller/:action/:id
) рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ :path_prefix
рдЧрдП рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП :path_prefix
, рдФрд░ :name_prefix
рдЕрдм рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "_" рдЬреЛрдбрд╝рддрд╛ рд╣реИ
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:
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 рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди
- HTML рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдЖрдкрдХреЛ
h(String)
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдЕрдм рд╕рднреА рджреГрд╢реНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЕрдирдлрд╝рд┐рд▓реНрдЯрд░реНрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ raw(string)
рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред - рдорджрджрдЧрд╛рд░ рдЕрдм HTML5 рдорд╛рд░реНрдХрдЕрдк рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
label
рд╣реЗрд▓реНрдкрд░ I18n рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред f.label :name
рддреБрд░рдВрдд рдЕрдиреБрд╡рд╛рджрд┐рдд :name
рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ :name
ред- I18n рдХреЗ рд▓рд┐рдП
select
рдЕрдм рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ :en.helpers.select
рдмрдЬрд╛рдп :en.support.select
ред - рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рд╕рдордп рд╕реАрдорд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП ERB- рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рдорд╛рдкрди рдЯреИрдЧ рдореЗрдВ рдорд╛рдЗрдирд╕ рд╕рд╛рдЗрди рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
grouped_collection_select
рд╕рд╣рд╛рдпрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред- рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
content_for?
рд╡рд┐рдзрд┐ content_for?
рд╕рд╛рдордЧреНрд░реА рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рдБрдЪ рдХрд░реЗрдВред - рдЙрддреНрддреАрд░реНрдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
:value => nil
рд▓рд┐рдП рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдлрд╝реАрд▓реНрдб рдорд╛рди рдХреЛ nil
рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред - рдкрд╛рд╕рд┐рдВрдЧ
:id => nil
рдкреНрд░рдкрддреНрд░ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдирдЖрдИрдПрд▓, рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдВрдЧреАред - рдкрд╛рд╕ рдХрд░рдХреЗ
:alt => nil
to image_tag рд╣реЗрд▓реНрдкрд░, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдлрд╝реАрд▓реНрдб рдорд╛рди рдХреЛ nil
рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
8 рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓
рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рд░реЗрд▓ 3.0 рдХрд╛ рдПрдХ рдирдпрд╛ рдШрдЯрдХ рд╣реИред рдЕрдм рдХреЛрдИ рднреА ORM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░реЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡рд╣ рд╣реИ рдПрдХреНрдЯрд┐рд╡ рдореЙрдбрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЕрдореВрд░реНрдд рдкрд░рдд рд╣реИред
8.1 рдУрдЖрд░рдПрдо рдЕрдореВрд░реНрдд рдФрд░ рдПрдХреНрд╢рди рдкреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рд░реЗрд▓ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХреНрд╢рди рдкреИрдХ рд╕реЗ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд╕рднреА рд▓рд┐рдВрдХ рдирд┐рдХрд╛рд▓рдирд╛ рдерд╛ред рдЕрдм рдпрд╣ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдУрдЖрд░рдПрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рд┐рд░реНрдл рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА - ActiveRecord рдХреА рддрд░рд╣ рдХрд┐рд╕реА рднреА рд░реВрдмреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдорд╛рдиреНрдпрддрд╛рдПрдБ 8.2
рдорд╛рдиреНрдпрддрд╛ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдИ, рдЬрд┐рд╕рд╕реЗ рдЕрдиреНрдп ORM рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдкрдирд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛редрдЕрдм рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ validates :attribute, options_hash
редрдЖрдк options_hash
рдПрдХ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ::acceptance => Boolean
:confirmation => Boolean
:exclusion => { :in => Ennumerable }
:inclusion => { :in => Ennumerable }
:format => { :with => Regexp, :on => :create }
:length => { :maximum => Fixnum }
:numericality => Boolean
:presence => Boolean
:uniqueness => Boolean
рдзреНрдпрд╛рди рджреЗрдВ: рдкрд┐рдЫрд▓реЗ рд╕рднреА рд╕рддреНрдпрд╛рдкрди рдЕрднреА рднреА рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдирдИ рд╢реИрд▓реА рдкреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝ (рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ) рд╣реИредрдЖрдк рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ 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 рдореЗрдВ рдврд╛рдВрдЪреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдВрдЬреАрд░реЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдирдП рддрд░реАрдХреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:where
- рдкреБрдирд░реНрдорд┐рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдХреНрдпрд╛ рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛редselect
- рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЪрдпрдиредgroup
- рдкреНрд░рджрд╛рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рд╕рдореВрд╣ рд╕рдВрдмрдВрдзредhaving
- GROUP BY
рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реЗ рдПрдХ рдПрдирд╛рд▓реЙрдЧ редjoins
- рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде relation'a рдХреЛ рдорд░реНрдЬ рдХрд░рддрд╛ рд╣реИредclause
- JOIN
рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реЗ рдПрдХ рдПрдирд╛рд▓реЙрдЧ редincludes
- рдкрд╣рд▓реЗ рд░реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВредorder
- рдкрд╛рд░рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдмрдВрдзредlimit
- рд╕рдВрдмрдВрдз рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИредlock
- рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИредreadonly
- рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рдореЛрдб рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИредfrom
- рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП relation'a рдХреЗ рд▓рд┐рдП рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИредscope
- (рдкреВрд░реНрд╡ рдореЗрдВ named_scope
) рдПрдХ рд╕рдВрдмрдВрдз рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИредwith_scope
- рдЬреИрд╕реЗ with_exclusive_scope
, рдПрдХ рд░рд┐рд▓реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рджреЗрддрд╛ рд╣реИредdefault_scope
- relation'ami рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА :9.2 рдЕрдиреНрдп рд╕реБрдзрд╛рд░
:destroyed?
рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:inverse_of
рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдХреЗ рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд░рд┐рд╢реНрддреЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
9.3 рдкреИрдЪ рдФрд░ рд╕рдорд░реНрдерди рдХреА рд╕рдорд╛рдкреНрддрд┐
рд╢реАрд░реНрд╖ рдкрд░, рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВ:- SQLite 3 рдХреЗ рдкрдХреНрд╖ рдореЗрдВ SQLite 2 рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- MySQL рдореЗрдВ рдХреЙрд▓рдо рдСрд░реНрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╕рдорд░реНрдердиред
- PostgreSQL рдХреЗ рд▓рд┐рдП рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб
TIME_ZONE
- рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рдЧрд▓рдд рдорд╛рди рдирд╣реАрдВред - PostgreSQL рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реНрдХреАрдорд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдердиред
table_name
рдЕрдм рдХреИрд╢реНрдбред- рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рдХрдИ рдмрдЧрдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдордЬрдмреВрдд рд╕рдлрд╛рдИ рдХреА рдЧрдИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рдЬрд╛рдиреА рдереА:named_scope
рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ scope
- рд╡рд┐рдзрд┐ рдореЗрдВ
scope
рдЖрдкрдХреЛ рд╢реИрд▓реА рдореЗрдВ рдЦреЛрдЬ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдмрдВрдз рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :condition => {}
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП::since, lambda {|time| where(тАЬcreated_at > ?тАЭ, time) }
save(false)
рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирдд save(:validate => false)
- рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП I18n рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
:en.activerecord.errors.template
рд╣реИ:en.errors.template
model.errors.on
рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирдд model.errors[]
validates_presence_of
рдЕрдм рдмрди рдЧрдпрд╛ :presence => true
ActiveRecord::Base.colorize_logging
рдФрд░ config.active_record.colorize_logging
рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирдд Rails::Subscriber.colorize_logging
рдпрд╛ config.colorize_logging
ред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рддрдерд╛рдХрдерд┐рдд рд░реЗрд▓ рдорд╢реАрди 3.0 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред10. рд╕рдХреНрд░рд┐рдп рд╕рдВрднреЛрдЧ
рдПрдХреНрдЯрд┐рд╡ рдореЙрдбрд▓ рдореЗрдВ рдПрдХреНрдЯрд┐рд╡ рд░рд┐рд╕реЛрд░реНрд╕ рдХреЛ рднреА рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХреНрд╢рди рдкреИрдХ рдореЗрдВ рдПрдХреНрдЯрд┐рд╡ рд░рд┐рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ред- рдорд╛рдиреНрдпрддрд╛рдУрдВ рдиреЗ рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛрдбрд╝рд╛ред
- рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реБрдХ рджреЗрдЦрдиреЗред
- HTTP рдкреНрд░реЙрдХреНрд╕реА рд╕рдкреЛрд░реНрдЯ
- рдкрд╛рдЪрди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╕рдорд░реНрдердиред
- рдореЙрдбрд▓ рдирд╛рдордХрд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рд╕рдХреНрд░рд┐рдп рд╕рдВрд╕рд╛рдзрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдБрдЪ рд╣реИрд╢ рдореЗрдВ рдмрджрд▓ рдЧрдИрдВред
- рдПрд▓рд┐рдпрд╛рд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ
first
, last
рдФрд░ all
рдЗрд╕реА рджрд╛рдпрд░реЗ рдХреЗ рд▓рд┐рдПред find_every
ResourceNotFound
,save!
, ResourceInvalid
, valid?
ред- ActiveResource
update_attribute
update_attributes
. - , ,
content-type
format
Active Resours'a. - (schema block)
instance_eval
. ActiveResource::ConnectionError#to_s
, @response
#code #message (...).- JSON.
load
.- 410 , , .
- Active Resouce SSL.
- рдЕрдм рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ
Net::HTTP
open_timeout
ред
рдкрд╣рдЪрд╛рдирд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд:save(false)
рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирдд save(:validate => false)
- рд░реВрдмреА 1.9.2:
URI.parse
рджреЛрдиреЛрдВ .decode
рдкрджрд╛рд╡рдирдд рд╣реИрдВ рдФрд░ рдЕрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
11. рд╕рдХреНрд░рд┐рдп рд╕рдорд░реНрдерди
рд╣рдордиреЗ рдПрдХреНрдЯрд┐рд╡ рд╕рдкреЛрд░реНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдлрд▓рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреБрдЫ рдЫреЛрдЯреЗ рд╕рдмрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдПрдХреНрдЯрд┐рд╡ рд╕рдкреЛрд░реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдИ рдЖрдВрддрд░рд┐рдХ рд░реЗрд▓ рдореЙрдбреНрдпреВрд▓ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧреЗред- рдкреВрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХреБрд▓ рд╕рдлрд╛рдИ рдХреА рдЧрдИ, рдХрдИ рдЕрдкреНрд░рдпреБрдХреНрдд рддрд░реАрдХреЛрдВ рдХреЛ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛
- Active Support TZInfo , Memchache Client Bundle : ,
gem bundle
- ActiveSupport::SafeBuffer
Array.uniq_by
Array.uniq_by!
- ,
TimeZone.seconds_to_utc_offset
ActiveSupport::Notifications
ActiveSupport.use_standard_json_time_format
true
ActiveSupport.escape_html_entities_in_json
true
Integer#multiple_of?
, тАФ false
string.chars
string.mb_chars
ActiveSupport::OrderedHash
- YAML- SAX XmlMini, LibXML Nokogiri
Object#presence
, ( тАФ nil
)String#exclude?
include?
to_i
DateTime
, Active Support
, to_yaml
DateTime
Enumerable#exclude?
Enumerable#include?
, !x.include?
- XSS
ActiveSupport::HashWithIndifferentAccess
Enumerable#sum
, :size
inspect
0
modelname
element
collection
String#to_time
String#to_datetime
- -,
:before
:after
, ActiveSupport::OrderedHash#to_a
( Hash#to_a
Ruby 1.9)MissingSourseFile
рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ LoadError
- рдЬреЛрдбрд╝рд╛
Class#class_attribute
, рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рд╕реНрддрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рд▓ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЕрдВрдд рдореЗрдВ
ActiveRecord
рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛DeprecatedCallbacks
рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдм рд░реВрдмреА 1.8.7 рдФрд░ рд░реВрдмреА 1.9 рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ:Integer#even?
рдФрд░ Integer#odd?
String#each_char
String#start_with?
рдФрд░ String#end_with?
(3 рд╡реНрдпрдХреНрддрд┐ рдЙрдкрдирд╛рдо рдЕрднреА рднреА рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ)String#bytesize
Object#tap
Symbol#to_proc
Object#instance_variable_defined?
Enumerable#none?
рд╕реБрд░рдХреНрд╖рд╛ рдкреИрдЪ REXML рдПрдХреНрдЯрд┐рд╡ рд╕рдкреЛрд░реНрдЯ рдореЗрдВ рд░рд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рд░реВрдмреА 1.8.7 рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрднреА рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рдХреНрд░рд┐рдп рд╕рдорд░реНрдерди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХрдм рдирд╣реАрдВредрдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдЙрдирдХреА рдмреЗрдХрд╛рд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:Object#remove_subclasses_of
, Object#subclasses_of
,Object#extend_with_included_modules_from
Object#extended_by
Class#subclasses
, Class#reachable?
,Class#remove_class
Regexp#number_of_captures
Regexp.unoptionalize
, Regexp.optionalize
,Regexp#number_of_captures
12. рдПрдХреНрд╢рди рдореЗрд▓рд░
рдирдП рдореЗрд▓ рдХреЗ рд╕рд╛рде TMail рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде , рдПрдХреНрд╢рди рдореЗрд▓рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдПрдкреАрдЖрдИ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИред рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдПрдХреНрд╢рди рдореЗрд▓рд░ рдХреЛ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдм рдПрдХреНрд╢рди рдореЗрд▓рд░ рдХреЗрд╡рд▓ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдЕрдм рдпрд╣ рдореЗрд▓ рд░рддреНрди рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдПрдХреНрд╢рди рдореЗрд▓рд░ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЧрдИ рд╣реИред- рд╕рднреА рдкреНрд░реЗрд╖рдХ рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВ
app/mailers
- рдЕрдм рдЖрдк рдИрдореЗрд▓ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ tromya рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
attachments
, headers
рдФрд░mail
- рдореЗрд▓ рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдПрдХреНрд╢рди рдореЗрд▓рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрдм рдПрдХ рдореЗрд▓ :: рд╕рдВрджреЗрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рддрдм рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
deliver
- рдореЗрд▓ рдбрд┐рд▓реАрд╡рд░реА рдкрджреНрдзрддрд┐ рдЕрдм рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрджреЗрд╢ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрд╢ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИ
- рдореЗрд▓ рдбрд┐рд▓реАрд╡рд░реА рд╡рд┐рдзрд┐ рдЕрдм
respond_block
рдПрдХреНрд╢рди рдХрдВрдЯреЛрд▓рд░ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддреА рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрджреЗрд╢ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╢рди рдореЗрд▓рд░ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдкрддреНрд░ рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдЧрд╛ - рдЖрдк
format.mime_type
рдореЗрд▓ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЦрд░реАрдж рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЬрд┐рд╕рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рда рдХреЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛, рдпрд╛ рдирдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╛ рд▓реЗрдЖрдЙрдЯ рдЬреЛрдбрд╝рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ - рд╕рднреА рдореЗрд▓рд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЕрдм рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдмрди рдЧрдП рд╣реИрдВ
рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд:charset
, :content_type
, :mime_version
, :implicit_parts_order
рд╢реИрд▓реА рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЙрд▓ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирддActionMailer.default :key => value
- рдЧрддрд┐рд╢реАрд▓ рддрд░реАрдХреЛрдВ
create_method_name
рдФрд░ deliver_method_name
рдЕрдм рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рд┐рд░реНрдл рдлреЛрди method_name
рд╣реИ рдХрд┐ рд░рд┐рдЯрд░реНрди рдПрдХ рд╡рд╕реНрддреБ Mail::Message
ред ActionMailer.deliver(message)
рдкреБрд░рд╛рдирд╛ рд╣реИ, рдмрд╕ рдлреЛрди рдХрд░реЛ message.deliver
редtemplate_root
рдкрджрд╛рд╡рдирдд - рдкрд╛рд╕ format.mime_type
рдмреНрд▓реЙрдХ рдХреЗ рд╡рд┐рдзрд┐ рд╕реЗ рдкреНрд░реЛрдХ-рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рд░реЗрдВрдбрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд╛рд╕ рдХрд░реЗрдВ mail
редbody
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рднреА рдЕрдм рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ ( body {:ivar => value}
), рдЗрд╕рд▓рд┐рдП рдЕрдм рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╕реАрдзреЗ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рд╡реЗ рджреГрд╢реНрдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред- рдореЗрд▓рд░ рдЕрдм рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
app/models
рдореЗрдВ app/mailer
ред
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА :13. рдкреНрд░рддрд┐рднрд╛рдЧреА
рдЙрди рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦреЗрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХрдИ рдШрдВрдЯреЛрдВ рддрдХ рд░реЗрд▓ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИред 3. рдЙрди рд╕рднреА рдХрд╛ рд╕рдореНрдорд╛рди рдФрд░ рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░реЗрдВ!рдкреБрдирд╢реНрдЪред рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рд╕рд╛рде рд╣реА рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИредрдкреА рдкреА рдПрд╕ред рдореБрдЭреЗ рдХреАрдбрд╝реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж !