1

レールで private-pub gem を使用して基本的なチャット クライアントを作成しようとしています。私が実装しようとしている機能は次のとおりです。以下のコードに示すように、オンライン ユーザーのリストがあります。すべてのユーザーは、自分のプライベート チャンネルに登録されています。ユーザーが別のユーザーにメッセージを送信するには、オンライン ユーザーのリストからユーザーを選択してメッセージを送信する必要があります。ユーザーが選択されると、jquery を使用してユーザーのクラスがアクティブに設定されます。次に、オンライン ユーザーのクラス名であるユーザー ID が取得され、メッセージを公開しようとします。このメッセージを公開するには、彼が購読している彼のチャンネルに送信する必要があります。そのためには、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を使用してフェッチしています.このjavascript変数をルビー変数に変換する方法はありますか? 機能を実装するための他のアイデアをいただければ幸いです:)

4

2 に答える 2

0

Opal は、現時点で最高の Ruby から JavaScript へのコンバーター/コンパイラーです。ここで実際の動作を確認できます: http://goo.gl/f6f1D

于 2013-02-28T17:06:15.433 に答える
0

コントローラーに ajax リクエストを送信することで実現しました。(オンライン ユーザーのリストから) チャット ウィンドウでユーザーが選択されるたびに、これらのパラメーターをコントローラーに送信し、jquery を使用して値を設定することにより、隠しフィールドを介してモデルに保存します。ルビー経由でアクセスします。

ありがとう :)

于 2013-03-02T08:48:49.043 に答える