рд░реВрдмреА рдХреЗ рд╕рд╛рде рд░реЗрд▓реНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдлреБрд▓рд╕реНрдЯреИрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдПрдХ рдирдпрд╛ рдирдЬрд╝рд░

рдХреНрдпрд╛ рдлреБрд▓рд╕реНрдЯреИрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдпрджрд┐ рдЖрдк рдлреНрд░рдВрдЯрдПрдВрдб рдФрд░ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдлреБрд▓рд╕реНрдЯреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ 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ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХреНрд╢рдирдХреЗрдмрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрдиреЗрдХреНрд╢рди рд╕рд┐рд░реНрдл рдХреБрдЫ рдЪрд░рдгреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  1. рдЪреИрдирд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ

    app / рдЪреИрдирд▓ / hello_channel.rb
    # app/channels/hello_channel.rb
    class HelloChannel < ApplicationCable::Channel
      def subscribed
        stream_from "hello_1"
      end
    end
    

  2. рдЗрд╕ рдЪреИрдирд▓ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдмрдирд╛рдПрдБ
    рдРрдк / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдЪреИрдирд▓ / hello_channel.js
    // app/javascript/channels/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
# app/controllers/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
# config/routes.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/application.rb
#        config/application.rb
config.i18n.default_locale = :ru


рдРрдк / рдирд┐рдпрдВрддреНрд░рдХ / рд▓реЗрдЦ_рдХрдВрдЯреНрд░реЛрд▓рд░.рдЖрд░рдмреА
# app/controllers/articles_controller.rb
class ArticlesController < ApplicationController

  def new
    #  new   
    # rails -     
  end

  def create
    #        
    @article = Article.create(article_params)

    #    -    ,
    #    url  
    #   ,   
    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
// app/javascript/controllers/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  app/javascript/controllers/articles_controller.js
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";
}


рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


рд░реВрдмреА рдврд╛рдВрдЪреЗ рдкрд░ рд░реВрдмреА рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдпреЗ рдЙрдкрдХрд░рдг рдкреВрд░реНрдг рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдирдП рдХреНрд╖рд┐рддрд┐рдЬ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдгрд┐рдд рдЙрдкрдХрд░рдг рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИрдВ рдФрд░ рд▓рдВрдмреЗ рдбрд╛рдЗрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдПрдХ рд╕рдлрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╕рддрд╣ рдкрд░ рд╣реИред

рд░реВрдмреА рдврд╛рдВрдЪреЗ рдкрд░ рд░реВрдмреА рдХреЗ рд╕рд╛рде рдЖрдзреБрдирд┐рдХ рдФрд░ рддреЗрдЬ рдлреБрд▓рд╕реНрдЯреИрдХ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!

All Articles