1

我正在尝试使用 rails 中的 private-pub gem 创建一个基本的聊天客户端。我试图实现的功能如下。如下代码所示,有一个在线用户列表。每个用户都订阅了自己的私人频道。为了让用户向另一个用户发送消息,他必须从在线用户列表中选择一个用户并发送消息。选择一个用户时,使用 jquery 将用户的类设置为活动。然后获取在线用户的类名 userid 并尝试发布消息。要发布此消息,我需要将其发送到他订阅的频道,我需要将从 javascript 变量获取的用户 id 变量转换为 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​​ 变量?任何其他实现该功能的想法将不胜感激:)

4

2 回答 2

0

Opal 是目前最好的 Ruby 到 JavaScript 转换器/编译器。你可以在这里看到它的作用:http: //goo.gl/f6f1D

于 2013-02-28T17:06:15.433 回答
0

我通过向控制器发送 ajax 请求来实现它。每当在聊天窗口(从在线用户列表中)选择用户时,我将这些参数发送到控制器并通过设置使用 jquery 的值通过隐藏字段将其保存在我的模型中。现在我上面提到的 javascript 变量可以是通过红宝石访问。

谢谢 :)

于 2013-03-02T08:48:49.043 回答