рдХреНрдпрд╛ рдлреБрд▓рд╕реНрдЯреИрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдпрджрд┐ рдЖрдк рдлреНрд░рдВрдЯрдПрдВрдб рдФрд░ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдлреБрд▓рд╕реНрдЯреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ fullstack
рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ рд╡реЗрдм рдкреЗрдЬреЛрдВ рдкрд░ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рд░рд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдпрд╛ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдлреНрд░рдВрдЯреЗрдВрдб рдлреАрдЪрд░реНрд╕ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред
рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдПрдХ рдПрдорд╡реАрд╕реА рдврд╛рдВрдЪрд╛ рд╣реИ рдЬреЛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рдФрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рднреАрддрд░ рд╕реНрдерд┐рд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рдпрд╣ "рдХрд┐рд╕реА рднреА рддрд░рд╣" рдЬрд▓реНрджреА "" рдмрд╛рд╣рд░ рди рдирд┐рдХрд▓реЗ)ред рдпрд╣ рдмреИрдХрдПрдВрдб рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рджреЛрдиреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕рд┐рдХ рдлреБрд▓рд╕реНрдЯреИрдХ рджрд┐рд╢рд╛ рдореЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдлрдВрдбреЛрдВ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдХреНрд╖рдгрд┐рдХ рдЪреВрдХ рдереАред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдлреБрд▓рд╕реНрдЯреИрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВредWebpacker
рд╡реЗрдмрдкреИрдХрд░ рдПрдХ рд░рддреНрди рд╣реИ рдЬреЛ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╣рд╛рдЬ рдХрд░рддрд╛ рд╣реИредрд╡реЗрдмрдкреИрдХ рд╡реЗрдмрдкреИрдХ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ред рд╡реЗрдмрдкреИрдХрд░ рдбреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирд╡реАрдирддрдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдХреЛрдб (рд╕рдВрд░рдЪрдирд╛, рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛, рд╡рд┐рдзрд╛рдирд╕рднрд╛, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИредрд╡реЗрдмрдкреИрдХрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдордЭ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП, app/javascript/
рдкреНрд░рд╛рдердорд┐рдХ рдлрд╝рд╛рдЗрд▓ рд╡рд╛рд▓рд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ app/javascript/packs/application.js
редрдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ Webpacker рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛config/webpacker.yml
config/webpack/
config/webpack/development.js
config/webpack/environment.js
config/webpack/production.js
config/webpack/test.js
package.json
postcss.config.js
babel.config.js
.browserslistrc
node_modules/
bin/webpack
bin/webpack-dev-server
app/javascript/
app/javascript/packs/
app/javascript/packs/application.js
рд╡реЗрдмрдкреИрдХрд░ рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд░рддрд╛ рд╣реИред рдЖрдк рджрд┐рдП рдЧрдП рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рд╕реНрдЯрд┐рдореБрд▓рд╕, Vue, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреЛ рддреБрд░рдВрдд рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ :rails new myapp --webpack=stimulus
рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:bundle exec rails webpacker:install:stimulus
рд░реВрд▓реЗ рдСрди рд░реВрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдлреНрд░рдВрдЯреЗрдВрдб рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ = рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдмрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рднреА рд╕реБрд╡рд┐рдзрд╛ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реИрдВред рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╣реА рд╕рдВрдЧрдарди рд╕реЗ рдХрдо рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрдиреЗ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИредTurbolinks
рдЯрд░реНрдмреЛрд▓рд┐рдВрдХреНрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╣рд╛рдЬ рдХрд░рддреА рд╣реИредрдЯрд░реНрдмреЛрд▓рд┐рдВрдХ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛рд░реНрдп рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рдирд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди URL рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╕рдордп "рд╕реАрдо" рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рддреБрд▓рдирд╛ рдЕрдХреНрд╕рд░ рдПрд╕рдкреАрдП рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рджреЗ рд╕рд╛рджреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрдЬрд╛рдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЖрднрд╛рд╕ рджреЗрддрд╛ рд╣реИредрдСрдкрд░реЗрд╢рди рдХреЗ рдЯрд░реНрдмреЛрд▓рд┐рдВрдХреНрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд: рдПрдХ рдирдП рдкрддреЗ рдкрд░ рдПрдХ рдорд╛рдирдХ рд╕рдВрдХреНрд░рдордг рд╕реЗ рдирд╣реАрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрддреЗ рдкрд░ "рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ" рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдХреЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд▓реМрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,- рдПрдХ рдЕрд▓рдЧ рдкрддреЗ рдкрд░ рд╕рдВрдХреНрд░рдордг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
turbolinks:click, turbolinks:before-visit, turbolinks:visit
:; - рдпрд╛ рдПрдХ рдирдП рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
turbolinks:request-start, turbolinks:request-end
:; - рдпрд╛ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░
turbolinks:before-render, turbolinks:render, turbolinks:load
ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд░реНрдмреЛрд▓рд┐рдВрдХреНрд╕ рдореЗрдВ рдПрдХ рдкреНрд░рдЧрддрд┐ рдмрд╛рд░ рд╣реИ, рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЧреИрд░-рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредActioncable
ActionCable рд░реВрдмреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рд░реВрдмреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред ActionCable рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рдЪреИрдирд▓реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, app/channels/
рдкреНрд░рд╛рдердорд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ channel.rb
рдФрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ connection.rb
ред рдЗрди рдЪреИрдирд▓реЛрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - app/javascript/channels/
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ index.js
рдФрд░ consumer.js
редрдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХреНрд╢рдирдХреЗрдмрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрдиреЗрдХреНрд╢рди рд╕рд┐рд░реНрдл рдХреБрдЫ рдЪрд░рдгреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред- рдЪреИрдирд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
app / рдЪреИрдирд▓ / hello_channel.rb
class HelloChannel < ApplicationCable::Channel
def subscribed
stream_from "hello_1"
end
end
- рдЗрд╕ рдЪреИрдирд▓ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдмрдирд╛рдПрдБ
рдРрдк / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдЪреИрдирд▓ / hello_channel.js
import consumer from "./consumer"
consumer.subscriptions.create({ channel: "HelloChannel" }, {
received(data) {
console.log("Data received", data);
document.body.innerText += `\nHello, ${data.name}!`
}
})
рдФрд░ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рддреИрдпрд╛рд░ рд╣реИредрдЕрдм, рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдкреГрд╖реНрда рдФрд░ рдмрд╛рд╣рд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдВ рдФрд░ рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдкрддреЗ рдЬреЛрдбрд╝реЗрдВapp / рдирд┐рдпрдВрддреНрд░рдХреЛрдВ / hello_controller.rb
class HelloController < ApplicationController
def index
render :html => "Hello page...", :layout => true
end
def new
ActionCable.server.broadcast("hello_1", name: params[:name])
head 200
end
end
config / рдорд╛рд░реНрдЧреЛрдВ .rb
get "/hello" => "hello#index"
get "/hello/new" => "hello#new"
рд╣рдо рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдкрддреЗ рдкрд░ рдЬрд╛рдПрдВ 127.0.0.1eps000 / рд╣реИрд▓реЛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ, рдЗрд╕рдореЗрдВ рдЖрдк рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВредрдЕрдЧрд▓рд╛, рд╣рдо рдПрдХреНрд╢рди рдореЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ:curl http://127.0.0.1:3000/hello/new?name=World
рдФрд░ / рдХрдВрд╕реЛрд▓ рдкреГрд╖реНрда рдФрд░ рдЗрд╕рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВредрдлреЙрд░реНрдо рд╣реЗрд▓реНрдкрд░реНрд╕ рдФрд░ рд░реЗрд▓реНрд╕- ujs
рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХреБрдЫ рдирдИ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░реЗрд▓ рдврд╛рдВрдЪреЗ рдкрд░ рд░реВрдмреА рдХреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдФрд░ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реИрдВред рд╕рд╣рд╛рдпрдХреЛрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдореЙрдбрд▓, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдЕрдиреНрдп рдмреИрдХрдПрдВрдб рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рд░реНрдХрдЕрдк рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рд░рдВрдкрд░рд┐рдХ рдорд╛рд░реНрдХрдЕрдк рдкрд░ рдлреЙрд░реНрдо рд╣реЗрд▓реНрдкрд░реНрд╕ рдХрд╛ рд▓рд╛рдн рдореЙрдбрд▓ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдмрдВрдзрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рдлрд╛рд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ - рд╣реЗрд▓реНрдкрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрди рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдзреНрдпрдХрд╛рд░реА рдкреНрд░рдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ:рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рд▓реЗрдЦ / new.html.erb<%# app/views/articles/new.html.erb %>
<%# %>
<%= form_with(model: Article.new) do |f| %>
<div>
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div>
<%= f.label :text %>
<%= f.text_area :text %>
</div>
<%= f.submit %>
<% end %>
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ / рд╕реНрдерд╛рди / ru.yml# config/locales/ru.yml
#
ru:
activerecord:
attributes:
article:
title:
text:
config / application.rb
config.i18n.default_locale = :ru
рдРрдк / рдирд┐рдпрдВрддреНрд░рдХ / рд▓реЗрдЦ_рдХрдВрдЯреНрд░реЛрд▓рд░.рдЖрд░рдмреА
class ArticlesController < ApplicationController
def new
end
def create
@article = Article.create(article_params)
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :text)
end
end
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ редрд░реЗрд▓-ujs
рд░реЗрд▓-рдЙрдЬрд╛рд╕ рд╡рд┐рдиреАрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдврд╛рдВрдЪреЗ рдкрд░ рд░реВрдмреА рдХрд╛ рдореБрдЦреНрдп рд╣рд┐рд╕реНрд╕рд╛ рд╣реИредрд░реЗрд▓-рдЙрдЬреН, рдкреГрд╖реНрда рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрджрд▓рддреЗ рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВредрд░рд┐рдореЛрдЯ рд╡рд┐рдХрд▓реНрдк - рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ (рд▓рд┐рдВрдХ, рдлреЙрд░реНрдо) рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд▓рд┐рдВрдХ рдЙрджрд╛рд╣рд░рдг:<%= link_to " ", new_article_path, remote: true %>
рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрд░рдлреЗрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреВрд░рд╕реНрде рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ ajax:success, ajax:error, ajax:complete
:редрдкреБрд╖реНрдЯрд┐ рд╡рд┐рдХрд▓реНрдк - рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред<%= link_to "", article_path(article), method: :delete,
data: { confirm: ' , ?' } %>
Disable_with рд╡рд┐рдХрд▓реНрдк - рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ<%= form.submit data: { disable_with: "..." } %>
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд░реЗрд▓реНрд╕- ujs рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:Rails.fire(obj, name, data)
- рдЗрд╡реЗрдВрдЯ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рдиRails.ajax(options)
- XMLHttpRequest рдкрд░ рд░реИрдкрд░Rails.isCrossDomain(url)
- рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЛрдореЗрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдпреВрдЖрд░рдПрд▓ рдХрд╛ рд╕рддреНрдпрд╛рдкрдиRails.$(selector)
- рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдЖрд╡рд░рдгред рдИ-рдХреЙрдорд░реНрд╕рдЗрдВрдЯрд░реЛрд▓ рдЖрдкрдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рд╕реЗ рдХрдорд╛рдВрдб рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВimport Rails from "@rails/ujs"
рдкреНрд░реЛрддреНрд╕рд╛рд╣рди
рд╕реНрдЯрд┐рдореБрд▓рд╕ - рд░реЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рд░реВрдмреА рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдврд╛рдВрдЪрд╛редрд╕реНрдЯрд┐рдореБрд▓рд╕ рджреБрд░реНрд▓рдн рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рдХрд╛рд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдорд╛рдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреИрдХрдПрдВрдб рд╕реЗ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредрд╕реНрдЯрд┐рдореБрд▓рд╕ рдХрд╛ рдореВрд▓ рдХрд╛рд░реНрдп рд╣реИрдВрдбрд▓рд░ рдХреЛ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдмрд╛рдВрдзрдирд╛ рд╣реИред рд╕реНрдЯрд┐рдореБрд▓рд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, app/javascript/controllers/
рдкреНрд░рд╛рдердорд┐рдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрддреНрддреЗрдЬрдирд╛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ index.js
ред рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ _controller.js
, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,articles_controller.js
ред рдЕрдЧрд▓рд╛, рд╕реНрдЯрд┐рдореБрд▓рд╕ рд▓реЛрдбрд░ рдРрд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд▓реЙрдХреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИредрд╕реНрдЯрд┐рдореБрд▓рд╕ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдХрд░рдг рд╣реЛрддреЗ рд╣реИрдВ: рдирд┐рдпрдВрддреНрд░рдХ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг ( initialize
), рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ ( targets
, рд▓рдХреНрд╖реНрдп), рдмреНрд▓реЙрдХ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ ( connect
) рдФрд░ рдЗрд╕реЗ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ ( disconnect
), рдмреНрд▓реЙрдХ рдХреЗ рдбреЗрдЯрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ ( this.data.get
)ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдЯрд┐рдореБрд▓рд╕ рдореЗрдВ рд▓рд┐рдЦрд┐рдд рдПрдХ рд╕рдХреНрд░рд┐рдп / рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдЯреЗрдЯрдлреБрд▓ рдмреНрд▓реЙрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИредapp / views / home / show.html.erb<%# app/views/home/show.html.erb %>
<%# home %>
<%# ( ) %>
<div data-controller="home"
data-home-active-text="Activated" data-home-deactive-text="Deactivated">
<%# text home %>
<p data-target="home.text"></p>
<%# action click home %>
<button data-action="home#click"></button>
</div>
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдирд┐рдпрдВрддреНрд░рдХ / home_controller.js
import { Controller } from "stimulus"
export default class extends Controller {
static targets = [ "text" ]
initialize() {
this.activeText = this.data.get("active-text");
this.deactiveText = this.data.get("deactive-text");
}
connect() {
this.active = this.data.get("active") == "true";
this.refresh();
}
disconnect() {
this.element.setAttribute("data-home-active", !!this.active);
}
click() {
this.active = !this.active;
this.refresh();
}
refresh(){
this.element.style.background = this.active ? "none" : "#EEE";
this.textTarget.innerHTML = this.active ? this.activeText : this.deactiveText;
this.textTarget.style.color = this.active ? "black" : "#777";
}
}
рдХреНрд▓рд╛рд╕рд┐рдХ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕реНрдЯрд┐рдореБрд▓рд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ: рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдПрдХ рдирдП рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣реИрдВрдбрд▓рд░ рдХреЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрдВрдзрди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реНрдЯрд┐рдореБрд▓рд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдкрдХреЛ рдПрдХ рдмрдбрд╝реА рд╕реАрдорд╛ рддрдХ рдЬрд▓реНрджреА рдФрд░ рд╕рдХреНрд╖рдо рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ рдЬреЛрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕реНрдЯрд┐рдореБрд▓рд╕ рдЕрдиреНрдп рд░реВрдмреА рдХреЗ рд╕рд╛рде рд░реЗрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рддреА рд╣реИ - рд▓рдЧрднрдЧ рд╣рд░ рдмрдВрдбрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЙрджреНрднрд╡ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИредрд╕реНрдЯрд┐рдореБрд▓рд╕ рдФрд░ рд╡реЗрдмрдкреИрдХрд░
рд╡реЗрдмрдкреИрдХрд░ рдПрдХ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╕реНрдЯрд┐рдореБрд▓рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:rails new myapp --webpack=stimulus
рдпрд╛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП:bundle exec rails webpacker:install:stimulus
рд╕реНрдЯрд┐рдореБрд▓рд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рд╕реНрдЯрд┐рдореБрд▓рд╕ рдЖрдкрдХреЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдХрд╛рд╕ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред рд╕реНрдЯрд┐рдореБрд▓рд╕ рдХреЗ рд╕рд╛рде, рдлреНрд░рдВрдЯреЗрдВрдб рд╕рдорд╛рдзрд╛рди рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдУрдУрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдХреЛ рд╕реЛрдЪ-рд╕рдордЭрдХрд░ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЙрддреНрддреЗрдЬрдХ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рд▓реА рдЧрдИ рдЬрдЯрд┐рд▓ рдЧреНрд░рд╛рдлрд┐рдХ рдШрдЯрдХреЛрдВ рдХреЗ рдмреНрд▓реЙрдХ рддрддреНрд╡реЛрдВ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдпрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ (рдХреИрд▓реЗрдВрдбрд░реНрд╕, рдСрдЯреЛ-рдХрдВрдкрд╛рдЗрд▓рд░, рд╕реВрдЪрд┐рдпрд╛рдБ, рдкреЗрдбрд╝ рдФрд░ рдЕрдиреНрдп) рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реНрдЯрд┐рдореБрд▓рд╕ рдкреБрд░рд╛рдиреЗ рдлреНрд░рдВрдЯреЗрдВрдб-рдЯреВрд▓реНрд╕ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдФрд░ рдЖрдзреБрдирд┐рдХ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИредрд╕реНрдЯрд┐рдореБрд▓рд╕ рдФрд░ рд░реВрдмреА рд░реЗрд▓реНрд╕ рдкрд░
рд╕реНрдЯрд┐рдореБрд▓рд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдЙрд╕реА рддрд░рд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдЬреИрд╕реЗ рдЖрдк рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рднреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рднреА рдмрд╛рдВрдзрддреЗ рд╣реИрдВред рд╕реНрдЯрд┐рдореБрд▓рд╕ рдХреЗ рд╕рд╛рде, рдлреНрд░рдВрдЯреЗрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рдорд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рджреЛрдиреЛрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИредрдЙрддреНрддреЗрдЬрдирд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛
рдЙрддреНрддреЗрдЬрдирд╛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЛ рдкреВрд░реЗ рдкреГрд╖реНрда рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕реНрд╡рддрдВрддреНрд░ рдЪреИрдирд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрда рдкрд░ рдХрдИ рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд░рд╣рд╛ рд╣реИредрд╕реНрдЯрд┐рдореБрд▓рд╕ рдФрд░ рдЯрд░реНрдмреЛрд▓рд┐рдВрдХ
рдЯрд░рдмреЛрд▓рд┐рдВрдХреНрд╕ рдкреЗрдЬ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реА рд╕реНрдЯрд┐рдореБрд▓рд╕ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдЯрд┐рдореБрд▓рд╕ рдХреЛ рдкреЗрдЬ рдХреЗ рдмреНрд▓реЙрдХ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИредрдЯрд░реНрдмреЛрд▓рд┐рдВрдХреНрд╕ рди рдХреЗрд╡рд▓ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рдВрдХреНрд░рдордг рдкрд░ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рднреА рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рдХреИрд╢реНрдб рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдирдпрд╛ рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╕реНрдЯрд┐рдореБрд▓рд╕ рдЕрдкрдиреЗ рдЖрдк рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдпреВрдирд┐рдЯ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ disconnect
- рдФрд░ рдлрд┐рд░, рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд▓реМрдЯрддреЗ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдЕрдкрдиреА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рд╕реНрдЯрд┐рдореБрд▓рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХреЛрдб рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ, рдЬрдм рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ ( disconnect
), рдореВрд▓реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдмреНрд▓реЙрдХ рдХреЗ рдбреЗрдЯрд╛-рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ this.active
, рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп ( connect
), рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИредрдкреГрд╖реНрдареЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕реА рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреЗрдЬ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рднрд░рдирд╛ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдЖрдХрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВредрдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рд╡реЗрдм рдЪреИрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдкреЗрдЬ рдкрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдпрд╛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬрдм рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рд╛рде рдЗрдХрд╛рдИ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рд▓рд╛рдкрддрд╛ рдирдП рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓реЗрдВредрдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреГрд╖реНрда рдЗрддрд┐рд╣рд╛рд╕ рдкрд░ рд╡рд╛рдкрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╕реНрдЯрд┐рдореБрд▓рд╕ рдФрд░ рд╣реЗрд▓реНрдкрд░реНрд╕ рдлреЙрд░реНрдо
рд╕реНрдЯрд┐рдореБрд▓рд╕ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреА рдорджрдж рд╕реЗ, рдбреЗрдЯрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ HTML рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмреНрд▓реЙрдХ рдХреЗ рдбреЗрдЯрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредapp / views / articles / show.html.erb<%# app/views/articles/show.html.erb %>
<%# %>
<% article_data = article.attributes
.slice("id", "created_at", "updated_at", "author", "title").to_json %>
<%# div content_tag %>
<%= content_tag :div,
:data => { controller: :articles },
"data-articles-attributes" => article_data do %>
<%# ... %>
<% end %>
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдирд┐рдпрдВрддреНрд░рдХ / рд▓реЗрдЦ_рдХрдВрдЯреНрд░реЛрд▓рд░ред рдЬреЗрдПрд╕ (рд╕реНрдирд┐рдкреЗрдЯ)
initialize() {
this.attributes = JSON.parse(this.data.get("attributes"));
}
рдЙрддреНрддреЗрдЬрдирд╛ рдФрд░ рд░реЗрд▓-рдЙрдЬреН
рд╕реНрдЯрд┐рдореБрд▓рд╕ рдФрд░ рд░рд┐рдореЛрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╕реАрдзреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдЕрдЬрд╛рдХреНрд╕ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрд▓-рдЙрдЬреН рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рд╣реИрдВрдбрд▓рд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВредрджреВрд░рд╕реНрде рд╡рд┐рдХрд▓реНрдк рдФрд░ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ<%= link_to " ",
article_path(article, format: :html),
data: { remote: true, action: "ajax:success->articles#showArticle" } %>
рдЬрдм рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, articles_controller.rb
рддреЛ рд╢реЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рд╣реЛрдЧрд╛ ред рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рдиреЗ рдкрд░, рдПрдХ рдШрдЯрдирд╛ рдореЗрдВ рдЖрдЧ рд▓рдЧ рдЬрд╛рдПрдЧреА ajax:success
рдФрд░ showArticle
рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛app/javascript/controllers/articles_controller.js
рдирд┐рдпрдВрддреНрд░рдХ рд╢реЛрдЖрд░реНрдЯрд┐рдХрд▓ рд╡рд┐рдзрд┐ рдРрдк / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдирд┐рдпрдВрддреНрд░рдХ / рд▓реЗрдЦ_рдХрдВрдЯреНрд░реЛрд▓рд░.рдЬреЗрдПрд╕showArticle(e) {
const xhr = e.detail[2];
this.showFormTarget.innerHTML = xhr.responseText;
this.showFormTarget.style.display = "block";
}
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рд░реВрдмреА рдврд╛рдВрдЪреЗ рдкрд░ рд░реВрдмреА рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдпреЗ рдЙрдкрдХрд░рдг рдкреВрд░реНрдг рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдирдП рдХреНрд╖рд┐рддрд┐рдЬ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдгрд┐рдд рдЙрдкрдХрд░рдг рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИрдВ рдФрд░ рд▓рдВрдмреЗ рдбрд╛рдЗрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдПрдХ рд╕рдлрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╕рддрд╣ рдкрд░ рд╣реИредрд░реВрдмреА рдврд╛рдВрдЪреЗ рдкрд░ рд░реВрдмреА рдХреЗ рд╕рд╛рде рдЖрдзреБрдирд┐рдХ рдФрд░ рддреЗрдЬ рдлреБрд▓рд╕реНрдЯреИрдХ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!