Rails Integration
This guide explains how to use the live
gem with Ruby on Rails.
Tag Implementation
Here is a simple implementation of a real-time clock tag:
class ClockTag < Live::View
def bind(page)
super
# Schedule a refresh every second:
Async do
while true
sleep 1
update!
end
end
end
def render(builder)
builder.tag('div') do
builder.text(Time.now.to_s)
end
end
end
Controller
Implement a controller to render the clock tag:
require 'async/websocket/adapters/rails'
class ClockController < ApplicationController
RESOLVER = Live::Resolver.allow(ClockTag)
def index
@tag = ClockTag.new('flappy')
end
skip_before_action :verify_authenticity_token, only: :live
def live
self.response = Async::WebSocket::Adapters::Rails.open(request) do |connection|
Live::Page.new(RESOLVER).run(connection)
end
end
View
Render the tag in your view layer:
<h1>Clock</h1>
<%= @tag.to_html %>
Routes
Add a route to the controller:
Rails.application.routes.draw do
# Clock page:
get "clock/index"
# Live WebSocket:
match "clock/live", via: [:get, :connect]
end