Преобразование переменных javascript в переменные ruby

Я пытаюсь создать базовый клиент чата, используя драгоценный камень частного паба в рельсах. Функциональность, которую я пытаюсь реализовать, выглядит следующим образом. Существует список онлайн-пользователей, как показано в приведенном ниже коде. Каждый пользователь подписан на свой собственный частный канал. Чтобы пользователь мог отправить сообщение другому пользователю, он должен выбрать пользователя из списка онлайн-пользователей и отправить сообщение. Когда пользователь выбран, класс пользователя устанавливается активным с использованием 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? Любые другие идеи по реализации функциональности будут оценены :)


person Sai Suman    schedule 28.02.2013    source источник
comment
У вас есть проблемы с этим подходом или вы просто ищете лучший? Вы также не избегаете кавычек, это должно быть $('#message_content').val('<%= "#{@receiver} sai suman" %>');   -  person Hitham S. AlQadheeb    schedule 28.02.2013
comment
извините за это. Я просто пытался что-то отладить и вставил неправильный код.   -  person Sai Suman    schedule 28.02.2013


Ответы (2)


Opal — лучший на данный момент конвертер/компилятор Ruby в JavaScript. Вы можете увидеть его в действии здесь: http://goo.gl/f6f1D

person vonigo    schedule 28.02.2013
comment
Мне нужно преобразовать Javascript в ruby.not ruby ​​в javascript. Чтобы преобразовать ruby ​​в Javascript, мы можем просто избежать его в файле erb. Внешний компилятор не требуется. - person Sai Suman; 28.02.2013

Я добился этого, отправив запрос ajax на контроллер. Всякий раз, когда пользователь выбирается в окне чата (из списка онлайн-пользователей), я отправляю эти параметры в контроллер и сохраняю их в своей модели через скрытое поле, устанавливая значение использования jquery. Теперь переменная javascript, о которой я упоминал выше, может быть доступ через рубин.

Спасибо :)

person Sai Suman    schedule 02.03.2013