I am writing a simple chat in real time, I connected the "faye" gem so that the messages are immediately displayed without reloading the page. faye is not detected when sending a message, so you need to reload the page to see messages sent by another person
messages_controller.rb
def create respond_to do |format| if current_user @message = current_user.messages.build(message_params) if @message.save flash[:success] = 'Ура, отправилось! :)' else flash[:error] = 'Ошибка :(' end format.html {redirect_to root_path} format.js else format.html {redirect_to root_path} format.js {render nothing: true} end end end
application.js
//= require jquery //= require jquery_ujs //= require_tree . //= require faye //= require messages
messages.coffee
window.client = new Faye.Client('/faye') jQuery -> $('#new_message').submit -> $(this).find("input[type='submit']").val('Отправляем...').prop('disabled', true) try client.unsubscribe('/messages') catch console?.log "Can't unsubscribe" client.subscribe '/messages', (payload) -> $('#messages').find('.media-list').prepend(payload.message) if payload.message
create.js.erb
publisher = client.publish('/messages', { message: '<%= j render @message %>' }); publisher.callback(function() { $("#message_body").val(''); $("#new_message").find("input[type='submit']").val('Отправить').prop('disabled', false) }); publisher.errback(function() { alert('Ошибочка :('); });
https://github.com/AlexNikolaev94/chatclone.git source code