рдореИрдВрдиреЗ Groupon рдореЗрдВ рд░рддреНрди рдЧреЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛

рджреВрд╕рд░реЗ рджрд┐рди рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд░рддреНрди рдЧреЙрди - 4.0.0 рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ MVC рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рджреГрд╢реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХрдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рдХрд░ рдЬреЗрдПрд╕ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдЬ RoR рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ , sinatra- рдЬреИрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (sinatra, padrino, рдЖрджрд┐) рдФрд░ .Net MVC рдХреЗ рд▓рд┐рдП rutting рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирдХреНрд╢рд╛

рдореЗрд░рд╛ рдХрд╛рдо рдЧреНрд░реБрдкреЛрди рдореЗрдВ рдкреНрд░рд╛рджреЗрд╢рд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдирд╛ рдерд╛, рдЬрд┐рд╕реЗ рдкреНрд░рд╢рд╛рд╕рдХ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдСрдлрд╝рд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдСрдлрд╝рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рд░рд╣рддреЗ рд╣реИрдВред


рдпрд╣ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ Yandex.Maps рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕ рдкрд░ рдСрдлрд╝рд░ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рддрджрдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред Yandex.Maps рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рд╕реЗ рдЖрдП рдмрд╣реБрднреБрдЬ рд╡рд╛рдХреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдПред рдмрд┐рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрдВрдХ рдХреЗ рдиреАрдЪреЗ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ, рд╢рд╛рдпрдж рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА;)

рдЫрд╡рд┐

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

app/controllers/admin/map_controller.rb
 @location = City.find(params[:city_id].to_i) @offers = Offer.sorted.by_city(@location).by_day(params[:date]) @offers.map! do |offer| points = offer.points.map do |point| { id: it.id, longitude: it.longitude, latitude: it.latitude } end { id: offer.id, permalink: offer.permalink, title: offer.short_title, points: points } end @city_areas = CityArea.find_by_city @location @city_areas.map! do |area| #        end 


app/views/admin/map/map.html.haml
 .data-container{ data: { areas: @city_areas.to_json, offers: @offers.to_json } } 


app/assets/javascripts/admin/map.js
 $('.data-container').data('offers') ... 


рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рдирд┐рдпрдВрддреНрд░рдХ рдерд╛ - рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рдЬреЛ рдХрд┐ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЗрд╕реЗ рдореЙрдбрд▓ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдб рдЕрднреА рднреА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд░рд╣реЗрдЧрд╛ред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдордгрд┐ рдЧреЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд░рдмреНрдмрд▓ рдФрд░ рдЬреВрд▓рд░реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рд░рдмрд▓ рдПрдХ рдорд╣рд╛рди рд░рддреНрди рд╣реИ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрдШреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рд╣реИред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЧреЙрди рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рд░рдмреНрдмрд▓ рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

app/controllers/admin/map_controller.rb
 @location = City.find(params[:city_id].to_i) @offers = Offer.sorted.by_city(@location).by_day(params[:date]) @city_areas = CityArea.find_by_city @location gon.rabl template: 'app/rabl/offers.json.rabl', as: 'offers' gon.rabl template: 'app/rabl/areas.json.rabl', as: 'areas' 


app/rabl/offers.json.rabl
 collection @offers => 'offers' attributes :id, :permalink, :short_title child :points do attributes :id, :latitude, :longitude end 


app/assets/javascripts/admin/map.js
 gon.offers тАж 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЬреЗрдПрд╕ рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ "рд╕реНрд╡рдЪреНрдЫ" рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдЬреЗрдПрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛ред

рдЧреЛрди рдордгрд┐

рд░рдмреНрдмрд▓ рдФрд░ рдЬреВрд▓рд░реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЙрди рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рд╕реБрд▓рдн рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреБрдЫ рдЪрд░ рдХрд╛ рдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдпрд╣ рдЪрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, gon.global рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдЪрд░реЛрдВ рдХрд╛ рджрд╛рдпрд░рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИред рдЬреЗрдПрд╕ рдореЗрдВ, рд╡реЗрд░рд┐рдПрдмрд▓ gon.global рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд▓ рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 4.0.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЪрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджрд┐рдЦрд╛рдИ рджреА - gon.watch ред рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рдПрди-рд╕реЗрдХрдВрдб рдФрд░ рдПрдХ-рдмрд╛рд░ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╢реАрд░реНрд╖ рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдЯрд░реНрдорд┐рдирд▓ рд╢реАрд░реНрд╖ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

1. Gemfile рдХреЛ gem 'gon' рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ рдФрд░ bundle install рдЪрд▓рд╛рдПрдБ

2. рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдШрд░ # foo, app/views/home/foo.html.erb рдЗрд╕реЗ app/views/home/foo.html.erb рдФрд░ JS app/assets/javascripts/home.js.coffee
 rails g controller home foo 


3. рдХрдВрдЯреНрд░реЛрд▓рд░ рдПрдХреНрд╢рди app/controllers/home_controller.rb рдЯреЙрдк-рдХрдорд╛рдВрдб рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рд╡рди-рдЯрд╛рдЗрдо рдХреЛ gon.watch рдкрд░ рд▓рд┐рдЦреЗрдВ:
 def foo gon.watch.top = `top -l1` end 


4. рд▓реЗрдЖрдЙрдЯ app/views/layouts/application.html.erb рдореЗрдВ, рд╕рд┐рд░ рдореЗрдВ рдШрдбрд╝реА рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╣рд╛рдпрдХ рдЬреЛрдбрд╝реЗрдВ:
 <head> <%= include_gon(watch: true) %> 


5. app/views/home/foo.html.erb рд╡рд╣ рдЯреИрдЧ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╢реАрд░реНрд╖ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 <pre style='font-family:monospace;'></pre> 


6. рдХреЙрдлрд╝реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╡рд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреВрд░реНрд╡ рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ:
 $(document).ready -> renewPre = (data) -> $('pre').html(data.replace(/\\n/, "\n")) gon.watch('top', interval: 1000, renewPre) 


gon.watch рджреЛ рдпрд╛ рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ - рдЪрд░ рдХрд╛ рдирд╛рдо, рд╡рд┐рдХрд▓реНрдк (рд╡реИрдХрд▓реНрдкрд┐рдХ), рдХреЙрд▓рдмреИрдХред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ interval: 1000 рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ interval: 1000 рд╡рд┐рдХрд▓реНрдк, рдЬреЛ рд╣рд░ 1 рд╕реЗрдХрдВрдб рдореЗрдВ gon.watch рдХреЛрдб рдХреЛ рд▓реВрдк рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреВрд╕рд░рд╛ gon.watch рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░, рдПрдХ рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдкреВрд░реНрд╡ рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИред рд▓реВрдк рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ gon.unwatch рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЪрд░ рдирд╛рдо рдФрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк interval рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдЪрдХреНрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдПрдХ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рд╣реЛрдЧрд╛ рдФрд░ рдпрджрд┐ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдмрд╛рд░ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ред

рдпрд╣ рд╕рдм рд╣реИ, rails s 0.0.0.0:3000/foo , 0.0.0.0:3000/foo рдЦреЛрд▓реЛ - рд╣рдо рд╡рд╣рд╛рдБ рд╢реАрд░реНрд╖ рдкрд░ рд░рд╣рддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In148437/


All Articles