рдкрдЯрд░рд┐рдпреЛрдВ рдкрд░ рд░реВрдмреА рдмрд╕ рдореБрдЭреЗ рдореЛрд╣рд┐рдд рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рддрдХ, рд╕реАрдЖрд░рдпреВрдбреА рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рдкреАрдврд╝реА рдПрдХ рдЪреБрдиреМрддреА рдереАред
рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдореБрдЭреЗ рдЫрдВрдЯрд╛рдИ, рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдкреГрд╖реНрдард╛рдВрдХрди рдХреЗ рд╕рд╛рде рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ рдореБрдЭреЗ рд░реЗрд▓ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореИрдВрдиреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдПрдХ рднреА рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдореБрдЭреЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛:
- рдорд╛рдирдХ рдордЪрд╛рди_рдХрдВрдЯреНрд░реЛрд▓рд░ рдЬрдирд░реЗрдЯрд░ - рдЗрд╕рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде CRUD
- рдирд┐рдлреНрдЯреА рд╕реНрдХреИрдлреЛрд▓реНрдб - рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЫрд╛рдирдиреЗ рдФрд░ рдЫрдВрдЯрд╛рдИ рдирд╣реАрдВ рд╣реИ
- DataTable рдХреЗ рд▓рд┐рдП рдордгрд┐ - рдЬрдбрд╝ рдирд╣реАрдВ рд▓рд┐рдпрд╛, рдпрд╣ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЫрд╛рдирдиреЗ рдФрд░ рдЫрд╛рдВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛
рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореБрдЭреЗ Yii рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдкрд╕рдВрдж рдХрд┐рдП рдЧрдП CGridView рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдЧрднрдЧ рдЕрдкрдиреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреАрдлрд╛ рджреЗ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди
DRY CRUD рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕рдордЭреЗрдЧрд╛, рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЖрдкрдХреЛ рдФрд░ рднреА рдЙрдкрдпреБрдХреНрдд рдЙрдкрдХрд░рдг рдмрддрд╛рдПрдЧрд╛ред
рд╕реНрдерд╛рдкрдирд╛
DRY CRUD рдПрдХ рд░рддреНрди рд╣реИ рдЬреЛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдкрдирд╛ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреАрдврд╝реА рдХреЗ рдмрд╛рдж рдордгрд┐ рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рд░рддреНрди рдореЗрдВ рдордгрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
gem 'dry_crud', '= 1.7.0'
рд░рди
bundle install
рдФрд░ рдЬрдирд░реЗрдЯрд░
rails generate dry_crud --templates haml --tests rspec
рдЕрд╡рд╕рд░ рдкреНрд░рджрд░реНрд╢рди
рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкреЛрд╕реНрдЯ рдореЙрдбрд▓ рд╕реЗ рдПрдХ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдзреЛрдВ рд╕реЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ред
rails generate model User name:string email:string pass:string rails generate model Post author_id:integer title:string content:text is_draft:boolean
рдордиреБрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП,
to_s рдкрджреНрдзрддрд┐ рдХреЛ
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбрд▓ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рддрдм
/ app / рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдЗрд╕реЗ
CrudController рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ
рдорд┐рд▓рд╛ рд╣реИ ред рдЖрдк рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдХреЙрд▓рдо рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдм, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЫрдВрдЯрдиреА (рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреЙрд▓рдо) рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ
рд╕реАрдЖрд░рдпреВрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ
self.search_columns рд╕реНрдерд╛рдкрд┐рдд рд╣реИ) рдФрд░
рдкреЗрдЬрд┐рдиреЗрд╢рди рдХреЛ рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдЦрд░рд╛рдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

рд╕рдВрдкрд╛рджрди рдлрд╝реЙрд░реНрдо рдиреЗ рднреА рдирд┐рд░рд╛рд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреВрд▓рд┐рдпрди, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рдВрдмрдВрдз рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП:

рдФрд░ рд╣рд╛рдВ, рдпрд╣ рд╕рдм рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!
рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрдиреЗрдХреНрд╢рди
рдореЗрд░реА рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдФрд░ DRY CRUD рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╣реИ, рдмрд╕
рдЯреНрд╡рд┐рдЯрд░-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк-рд░реЗрд▓ рд░рддреНрди рдХреЛ рдХрдиреЗрдХреНрдЯ
рдХрд░реЗрдВ , рдЗрд╕реЗ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
rails generate bootstrap:install less
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рд▓реЗрдЖрдЙрдЯ / crud.html.haml рдФрд░
/app/assets/stylesheets/sample.scss рд╣рдЯрд╛рдПрдВ рдФрд░
/app/views/layouts/application.html рдлрд┐рд░ рд╕реЗ
рд▓рд┐рдЦреЗрдВ ред рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдПрдХ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рдбрд┐рдЬрд╝рд╛рдЗрди рдорд┐рд▓рддрд╛ рд╣реИ:

рдХреЙрд▓рдо рдЫрд┐рдкрд╛рдПрдВ
рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ
create_at рдФрд░
updated_at рдХреЙрд▓рдо рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╣реЗрд▓реНрдкрд░ рдХреЛ рдмрджрд▓реЗрдВред
рдХреЙрд▓рдо рд╕реЗрдЯ рдмрджрд▓реЗрдВ
рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ,
рдкрд╛рд╕ рдХреЙрд▓рдо рдЫрд┐рдкрд╛рдПрдБ рдФрд░
create_at рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реЛрд▓реНрдбрд░
/ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдЖрдВрд╢рд┐рдХ
/app/views/crud/_form.html.hamed рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ
рдкрд╣рд▓реА рдФрд░ рдПрдХрдорд╛рддреНрд░ рдкрдВрдХреНрддрд┐
= crud_table
рдЙрди рд╕реНрддрдВрднреЛрдВ рдХреА рд╕реВрдЪреА рдЬреЛрдбрд╝реЗрдВ
= crud_table
рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
= crud_table :name, :email, :created_at
рдкрд░рд┐рдгрд╛рдо:

рд╕реНрд╡рд░реВрдкрдг рд╕реЗрд▓ рд╕рд╛рдордЧреНрд░реА
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреЛрд╕реНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ:

рдЗрд╕реЗ 100 рд╡рд░реНрдгреЛрдВ рдкрд░ рдЯреНрд░рд┐рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╣реЗрд▓реНрдкрд░ рдореЗрдВ format_ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ
рдкрд░рд┐рдгрд╛рдо:

рд╕реНрдерд╛рдиреАрдпрдХрд░рдг
рдЖрдк рд░реЗрд▓ L18n рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ рд╕реЗрдЯ рдХрд░реЗрдВ:
рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ "l18n_generator" рдордгрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛
рд░реЗрд▓-рдЖрдИ 18 рдПрди рднрдВрдбрд╛рд░ рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
rails generate i18n_locale ru
рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓
/config/locales/en_crud.yml рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ DRY CRUD рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди
ru_crud.yml рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред
рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ YAML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
rails generate i18n_translation ru
рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓
/config/locales/translation_ru.yml рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ
ru_models.yml рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛
рд╣реВрдВрдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ
рдореЙрдбрд▓ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдирд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИ:

рд╕рдВрдкрд╛рджрди рдХреЗ рдмрд╛рдж рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди
рдЪрд┐рддреНрд░ рдЦрддреНрдо рд╣реЛ рдЧрдП рд╣реИрдВ, рдПрдХ рдЧрд╣рд░рд╛ рд╕рдорд╛рдпреЛрдЬрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдиреЗ рдпрд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ ("рд╢реЛ" рдПрдХреНрд╢рди) рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ "рдЗрдВрдбреЗрдХреНрд╕" рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдерд╛:
create
рд╡рд┐рдзрд┐ рдореЗрдВ рднреА рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдлрд┐рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрдкрд╛рджрди рдлреЙрд░реНрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╣рдорд╛рд░реЗ рдкреЛрд╕реНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕
update
рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд URL рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЙрд▓рдо рдореЗрдВ рдмрдЯрди рдЬреЛрдбрд╝рдирд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреНрд▓реЛрдирд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд╛рдпрдм рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЛрд╕реНрдЯ, рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрди рдорд╛рд░реНрдЧ рдореЗрдВ рдПрдХ рдирдИ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА
id
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдЧреА рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рднрд░реЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдмрдорд┐рдЯ рдлреЙрд░реНрдо
create
рдПрдХреНрд╢рди рдкрд░ рд╣реЛрдВрдЧреЗред
рдореИрдВрдиреЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдореЙрдбрд▓ рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЛрдб рд░рдЦрд╛:
рдмрдЯрди рдкреАрдврд╝реА рдХреЛрдб рд╕рд╣рд╛рдпрдХ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
рджреГрд╢реНрдп рдореЗрдВ рдХреЙрд▓рдо рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдирдпрд╛ рдмрдЯрди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб:
рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред рдХреЗрд╡рд▓ рджреЛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдЕрдм рдЖрдк рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ "рдХреНрд▓реЛрди" рдмрдЯрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ!
рдирд┐рд╖реНрдХрд░реНрд╖
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, "рдбреАрдк_рдХреНрд▓реЛрдирдмрд▓" рд░рддреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде ActiveRecord рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдлреЙрд░реНрдо рдореЗрдВ рдЖрдк рди рдХреЗрд╡рд▓ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд "has_many" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рди рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдлреАрд▓реНрдб, рдмрд▓реНрдХрд┐ рдХрдИ рдЪрдпрдиред рдФрд░ рдпрд╣ рд╕рдм рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЕрдзреНрдпрдпрди рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ DRY CRUD рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред
рдпрд╣ рдереЛрдбрд╝рд╛ рд╢рд░реНрдордирд╛рдХ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ "рд╕реНрд░реЛрдд рдХреЛрдб" рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИ, рдпрд╣ рд╢рд╛рдпрдж рд▓реЗрдЦрдХ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдЫреЛрдЯреА рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЬрд╛рдПред
рд╕рдВрджрд░реНрдн
рдордгрд┐ DRY CRUD рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рдЧрд┐рдЯрд╣рдм рдирдореВрдирд╛ рд╕реНрд░реЛрдд