Скрипт JQuery не работает с AJAX в Rails 4

По сути, у меня есть входящие сообщения (с использованием драгоценного камня mailboxer), расположенные в складном аккордеоне (с использованием twitter bootstrap). Всякий раз, когда пользователь нажимает на диалог, он разворачивается и показывает все сообщения. Я хочу, чтобы, когда пользователь нажимает на беседу, он также помечал беседу как прочитанную.

Я следовал инструкциям здесь, чтобы попытаться сделать то, что я хочу: Как вызвать метод rails из jQuery

В основном я пытался сослаться на "a data-toggle=...", поместив туда идентификатор, а затем запустив скрипт jquery, который получает путь render_read, который я создал в своем контроллере, всякий раз, когда я щелкаю что-то между "a data-toggle=....." и теги "/a" (stakoverflow не позволит мне морковить a's..)

Однако это не работает... пожалуйста, помогите, я пытался решить эту проблему в течение последнего дня.... Я также относительно новичок в рельсах.

_conversation.html.erb (Mailboxer использует это для отображения каждой беседы, когда я запускаю mailbox.inbox)

<div class="panel panel-default" >
        <div class="panel-heading">  
        <h3 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href= "#collapse_<%= conversation.id %>" id= "click_<%= conversation.id %>">

            <strong><%= conversation.subject %> </strong>

          </a>
        </h3>
        </div>

         <div id="collapse_<%= conversation.id %>" class="panel-collapse collapsing">
        <div class="panel-body">
            <%= content_tag_for(:ul, conversation.receipts_for(current_user)) do |receipt| %>
            <% message = receipt.message %>
            <% t = message.updated_at.localtime %>
             <div class="row">
             <div class="col-md-7"><strong><%= message.sender.first_name %>: </strong><%= message.body %></div>
             <div class="col-md-5">Sent <%= t.strftime("%a, %m/%e/%Y %I:%M %p") %></div>
             </div>
                <% end %>
                <%= render 'messages/form', conversation: conversation %>
            </div>
          </div>
</div>

Я запускаю этот скрипт внизу этого файла

 <script>$("#click_<%= conversation.id %>").click(function() {$.ajax("/conversations/render_read")});</script>

Мой контроллер разговоров находится в публичном разделе

  def render_read
   conversation.mark_as_read(current_user)
  end 

Мои маршруты.rb есть

resources :conversations, only: [:index, :show, :new, :create] do
 member do
   post :reply
   post :trash
   post :untrash
   get :render_read
 end
end

person user3321224    schedule 23.05.2014    source источник


Ответы (2)


Это происходит из-за turbolinks, вам нужно вставить data-turbolinks-eval=false в тег scrpt, чтобы он работал

<script data-turbolinks-eval=false>$("#click_<%= conversation.id %>").click(function() {$.ajax("/conversations/render_read")});</script>
person Rajdeep Singh    schedule 23.05.2014
comment
Я пробовал это, это все еще не работает. Я также попытался добавить атрибут data-no-turbolink в тег href, но это не помогает. - person user3321224; 23.05.2014

Прежде всего, вы должны включить jquery в отдельный файл, прочитайте эту статью для воронка активов. Чтобы ответить на ваш вопрос, вы можете либо сделать то, что предложил @RSB, либо вместо этого вы можете использовать событие jquery «on», что-то вроде этого:

$(document).on("click","#test",function(){
  // your code
});

Ознакомьтесь с моим ответом здесь, в нем перечислены некоторые больше решений вашей проблемы.

person Mandeep    schedule 23.05.2014
comment
Я знаю, что это не лучшие практики, но для небольших битов, тем более что у меня нет другого кода jquery, мне нравится иметь его просто как скрипт внизу той же страницы (хотя это создает функциональную проблему?). Кроме того, я пробовал события .on и .live, но все равно не работал... - person user3321224; 23.05.2014