Я пытаюсь создать базовый клиент чата, используя драгоценный камень частного паба в рельсах. Функциональность, которую я пытаюсь реализовать, выглядит следующим образом. Существует список онлайн-пользователей, как показано в приведенном ниже коде. Каждый пользователь подписан на свой собственный частный канал. Чтобы пользователь мог отправить сообщение другому пользователю, он должен выбрать пользователя из списка онлайн-пользователей и отправить сообщение. Когда пользователь выбран, класс пользователя устанавливается активным с использованием jquery. Затем извлекается идентификатор пользователя, который является именем класса онлайн-пользователя, и пытается опубликовать сообщение. Чтобы это сообщение было опубликовано, мне нужно отправить его на его канал, на который он подписан, для чего мне нужно преобразовать переменную идентификатора пользователя, полученную из переменной javascript, в переменную ruby.
<%= subscribe_to "/messages/#{current_user.id}" %>
<h1>Messages</h1>
<% if user_signed_in? -%>
<div class="row">
<div class="span3">
<div class="well sidebar-nav">
<ul class="nav nav-list userlist">
<% for user in User.all -%>
<% if user.online? and user.id!=current_user.id -%>
<li><%= link_to '#',:class => user.id ,:remote=>true do %>
<%= image_tag user.profile.picture(:thumbnail_medium) %>
<%= user.profile.name %>
<% receiver = user.id -%>
<% end %>
</li>
<% end -%>
<% end -%>
</ul>
</div>
</div>
<div class="span8 well well-small">
<div id="chatwindow">
<div id="messagewindow">
<ul id="chat">
<%= render @messages %>
</ul>
</div><br>
<div id="inputcontainer"><%= form_for Message.new, :remote=>true, :url => {:controller=>:messages,:action =>:create } do |f| -%>
<%= f.label :Message %>
<%= f.text_field :content %>
<%= f.submit "Submit" %>
<% end -%> </div>
</div>
</div>
</div>
<% else -%>
<% end -%>
Java-скрипты следующие:
$(function(){
$('.userlist li').click(function() {
$(this).siblings('li').removeClass('active');
$(this).addClass('active');
});
});
Это встроенный js для публикации сообщений
receiver = $('.active a').attr('class').
<% publish_to "/messages/"+receiver do -%>
$('#chat').append('<div class="well well-small"><%= j link_to (image_tag(current_user.profile.picture(:thumbnail))),username_path(current_user.username) %><%= j link_to current_user.profile.name, username_path(current_user.username) %> <%= " #{@message.content}" %></div>')
<% end -%>
$('#new_message)[0].reset();
чтобы создать канал, я получаю receiver
с помощью jquery, который мне нужно преобразовать в ruby, чтобы перейти к функции публикации, которая является проблемой. Есть ли способ преобразовать эту переменную javascript в переменную ruby? Любые другие идеи по реализации функциональности будут оценены :)
$('#message_content').val('<%= "#{@receiver} sai suman" %>');
- person Hitham S. AlQadheeb   schedule 28.02.2013