
рд╕рдВрднрд╡рддрдГ рдЖрд░рдУрдЖрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рд░ рдХреЛрдИ рдордЪрд╛рди рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдерд╛, рдЬреЛ рдПрдХ рдЯреАрдо рдХреЛ рдкрд▓рд╛рдпрди, рдирд┐рдпрдВрддреНрд░рдХ, рдореЙрдбрд▓ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдорд╛рдирдХ рд░реЗрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: рдПрд░рдм, рдЯреЗрд╕реНрдЯ :: рдпреВрдирд┐рдЯ, рдлрд┐рдХреНрд╕реНрдЪрд░, рд▓реЗрдХрд┐рди рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЙрдкрдХрд░рдг: рд╣реИрдорд▓, рдЖрд░рд╕реНрдкреЗрдХ, рдХрдХрдбрд╝реА, рдлреИрдХреНрдЯрд░реА рдЧрд░реНрд▓, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдЧреЛрдЯреЛ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ред
рд╕реНрд░реЛрдд рдбреЗрдЯрд╛:рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ rspec; рдЗрдЪреНрдЫрд╛-рдкреГрд╖реНрда рдкрд░ рдЕрдВрдХ рд▓рдЧрд╛рдирд╛; haml; рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдорд╣рд┐рд▓рд╛
рдЙрджреНрджреЗрд╢реНрдп:% rails generate scaffold post post:string
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
- contoller рдХреЗ рд╕рд╛рде will_paginate рд╕рдорд░реНрдерди, рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрджреЗрд╢
- will_paginate рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдореЙрдбрд▓
- рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдФрд░ haml рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВ
- рдЯреЗрд╕реНрдЯ :: рдпреВрдирд┐рдЯ рдХреЗ рдмрдЬрд╛рдп Rspec рдкрд░реАрдХреНрд╖рдг
- рдорд╛рдирдХ рдлрд┐рдХреНрд╕реНрдЪрд░ рдХреЗ рдмрдЬрд╛рдп рдлреИрдХреНрдЯреНрд░реА рдЧрд░реНрд▓ рдлреИрдХреНрдЯреНрд░реА
рд╕реНрдХреИрдлреЛрд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдордЪрд╛рди рдПрдХ рдирд┐рд░реНрдорд┐рдд рдЬрдирд░реЗрдЯрд░ рд╣реИ, рдпрд╣ рдЦреБрдж рд╕реЗ рдХреБрдЫ рднреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рдЬрдирд░реЗрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдкрд╛рдбрд╝ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
% rails g scaffold --help
рдЬрдирд░реЗрдЯрд░ рдХреЛ
Rreens_ROOT / config / application.rb рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдЖрдк рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
config.generators do |g|
рдХрд╕реНрдЯрдо рдирд┐рдпрдВрддреНрд░рдХ
рдЖрдЗрдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдордгрд┐ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реА рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░рддреНрдиреЛрдВ рдХрд╛ рдорд╛рд░реНрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
RAILS_ROOT% rails console
puts $LOAD_PATH
...
...
...
GEMS_PATH / рд░реЗрд▓рд┐рдпреЛрдВ [рд╕рдВрд╕реНрдХрд░рдг] / lib / рд░реЗрд▓ / рдЬрдирд░реЗрдЯрд░ / рд░реЗрд▓ / рд╕реНрдХреИрдлреЛрд▓реНрдб_рдХрдВрдЯреНрд░реЛрд▓рд░ / рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ
R Colors_ROOT / lib / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рд░реЗрд▓ / scoldold_controller / рдирд┐рдпрдВрддреНрд░рдХ.
rb
рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдкреГрд╖реНрдард╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рда рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рддреЗ рд╣реИрдВ
рдордЪрд╛рди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдРрд╕рд╛ рд╕реБрдВрджрд░ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ
рдХрд╕реНрдЯрдо рдореЙрдбрд▓
GEMS_PATH / activerecord [version] / lib / рд░реЗрд▓ / рдЬрдирд░реЗрдЯрд░ / active_record / рдореЙрдбрд▓ / рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде
RAILS_ROOT / lib / рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ / active_rectord / model / model.rb рдореЗрдВ model.rb рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ
рд░реВрд╕реА рднрд╛рд╖рд╛ рдФрд░ will_paginate рдХреЗ рд▓рд┐рдП 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ
рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝рд░
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо .erb рдХреЗ рдмрдЬрд╛рдп HAML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд░реЗрд▓ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдПрд░рдм, рд▓реЗрдХрд┐рди рд╣реИрд▓реНрдо рджреГрд╢реНрдп?
рдмрд╣реБрдд рд╕рд░рд▓, рдмрд╕ рдордгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ "haml-rails"ред
рдЬреЗрдордлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
gem 'haml-rails'
рдФрд░
рдмрдВрдбрд▓ рдЗрдВрд╕реНрдЯрд╛рд▓ рдЪрд▓рд╛рдПрдВ
рд╣реЛ рдЧрдпрд╛! рдЕрдм рд░реЗрд▓ рдЬрдирд░реЗрдЯрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП file_name.html.haml рдлрд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ
рдЪрд▓рд┐рдП рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред 5 рдлрд╛рдЗрд▓реЗрдВ (edit.html.haml, _form.html.haml, index.html.haml, new.html.haml, show.html.haml)
GEMS_PATH / haml-rails рд╕реЗ [рд╕рдВрд╕реНрдХрд░рдг] / lib / рдЬрдирд░реЗрдЯрд░ / haml / рдордЪрд╛рди / рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрдпрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ
RрдмреНрд╕_ROOT / lib / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / haml / рдордЪрд╛рди рдХреЗ рд▓рд┐рдПрдореИрдВ рдпрд╣рд╛рдВ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рд╕реНрд░реЛрдд рдЯреЗрдореНрдкрд▓реЗрдЯ -
haml-railsрд╕рдВрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдЯреЗрдореНрдкрд▓реЗрдЯ -
рд▓рд┐рдВрдХрдкрд░рд┐рдгрд╛рдо -
рд▓рд┐рдВрдХrspec
рдЬреИрд╕рд╛ рдХрд┐ рд╣реИрд▓реНрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рдирдХ RSpec рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдордгрд┐ рдХреЛ "rspec-rails" рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдордЪрд╛рди рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ, рд╕рд╣рд╛рдпрдХреЛрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ, рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП rspec рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдЧрд╛ред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк, рдореЗрд░реА рддрд░рд╣, рдХрдИ rspec рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ ROR рд╣рдореЗрдВ рдЗрд╕ рдЖрдЗрдЯрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдлреИрдХреНрдЯрд░реА рд▓рдбрд╝рдХреА
FG рдХреЗ рд▓рд┐рдП рдордЪрд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдордгрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ "rails3-рдЬрдирд░реЗрдЯрд░"
рдФрд░ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
Factory_girls рдХреЗ рдЕрд▓рд╛рд╡рд╛, rails3-рдЬрдирд░реЗрдЯрд░ рд░рддреНрди DataMapper, Authlogic, Mongomapper, Shoulda, Formtastic рдФрд░ SimpleForm рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛?
% rails g scaffold final final:string
active_record рд▓рд╛рдЧреВ рдХрд░реЗрдВ
db / migrate / 20110713193843_create_finals.rb рдмрдирд╛рдПрдБ
рдРрдк / рдореЙрдбрд▓ / рдлрд╛рдЗрдирд▓ рдмрдирд╛рдПрдВ
Rspec рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ
рдХрд▓реНрдкрдирд╛ / рдореЙрдбрд▓ / final_spec.rb рдмрдирд╛рдПрдБ
factory_girl рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ
рдХрд▓реНрдкрдирд╛ / рдХрд╛рд░рдЦрд╛рдиреЛрдВ / рдлрд╛рдЗрдирд▓ рдмрдирд╛рдПрдБ
рдорд╛рд░реНрдЧ рд╕рдВрд╕рд╛рдзрди: рдлрд╛рдЗрдирд▓
scaffold_controller рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ
рдРрдк / рдХрдВрдЯреНрд░реЛрд▓рд░ / рдлрд╝рд╛рдЗрдирд▓реНрд╕_рдХрдВрдЯреНрд░реЛрд▓рд░.рдЖрд░рдмреА рдмрдирд╛рдПрдБ
рд╣рд╡рд▓рджрд╛рд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдлрд╛рдЗрдирд▓ рдмрдирд╛рдПрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдлрд╛рдЗрдирд▓ / index.html.haml рдмрдирд╛рдПрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдлрд╛рдЗрдирд▓ / edit.html.haml рдмрдирд╛рдПрдБ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдлрд╛рдЗрдирд▓ / show.html.haml рдмрдирд╛рдПрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдлрд╛рдЗрдирд▓ / new.html.haml рдмрдирд╛рдПрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдлрд╛рдЗрдирд▓ / _form.html.haml рдмрдирд╛рдПрдВ
Rspec рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ
рд╕реНрдкреЗрдХ / рдХрдВрдЯреНрд░реЛрд▓рд░ / рдлрд╛рдЗрдирд▓_рдХрдВрдЯреНрд░реЛрд▓рд░_рд╕реНрдкреЗрдХ.рдЖрд░рдмреА рдмрдирд╛рдПрдБ
рдорджрджрдЧрд╛рд░
Rspec рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ
рдорджрджрдЧрд╛рд░
рдРрдк / рд╣реЗрд▓реНрдкрд░реНрд╕ / рдлрд╝рд╛рдЗрдирд▓_рд╣реЗрд▓реНрдкрд░ .rb рдмрдирд╛рдПрдБ
Rspec рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ
рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдордВрдЧрд╡рд╛рдПрдВ
рд╕рдорд╛рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ / рдкрд╛рдбрд╝
MVC рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ; haml view's; factory_girl рдХрд╛рд░рдЦрд╛рдиреЛрдВ; рдореЙрдбрд▓ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП RSpec; рдмрд┐рд▓реНрдЯ-рдЗрди рдкреЗрдЬрд┐рдиреЗрд╢рдиред
рд╕рдм рдХреБрдЫ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ))
рдкреВрд░рд╛ рдХреЛрдб рджреЗрдЦреЗрдВ
GithubрдЖрджрд░
рдЬреЗрдирд░реЗрдЯрд░ рдореИрдиреБрдЕрд▓рдкреЙрд▓ рдХреЗ рдмреИрд░реА рдЕрдиреБрдЪреНрдЫреЗрдж: рд░реЗрд▓ рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ 3Rspec рдЬрдирд░реЗрдЯрд░ рд╡рд┐рд╕реНрддрд╛рд░рдЬрдирд░реЗрдЯрд░ рдкреЙрдбрдХрд╛рд╕реНрдЯrails3-рдЬрдирд░реЗрдЯрд░ рдордгрд┐haml-rails рд░рддреНрди