JQuery脚本在Rails 4中没有使用/ AJAX

时间:2014-05-23 00:47:51

标签: jquery ruby-on-rails ajax twitter-bootstrap mailboxer

基本上,我将我的消息收件箱(使用邮箱宝石)安排在可折叠的手风琴中(使用twitter bootstrap)。每当用户点击对话时,它都会展开并显示所有消息。我想要它,以便当用户点击对话时,它也会将对话标记为已读。

我按照此处的说明尝试按照我要的方式执行操作:How to call a rails method from in jQuery

我基本上尝试通过在其中放入一个id然后运行一个jquery脚本来获取我在控制器中创建的render_read路径来引用"数据切换= ......"每当我点击"数据切换= ....."之间的东西时和" / a"标签(stakoverflow赢了,让我胡萝卜了......)

虽然它没有工作....请帮忙,我一直在试图解决这个问题....我在轨道上也相对较新。

_conversation.html.erb(当我运行mailbox.inbox时,Mailboxer使用它来呈现每个对话)

<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 

我的routes.rb有

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

2 个答案:

答案 0 :(得分:0)

由于turbolinks而发生这种情况,您需要在脚本代码中插入data-turbolinks-eval=false才能使其正常工作

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

答案 1 :(得分:0)

首先,您应将您的jquery包含在单独的文件中read this article for asset pipeline。要回答你的问题,你可以做@RSB建议的事情,或者你可以使用jquery&#34; on&#34;事件,像这样:

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

查看我的回答here,它会为您的问题列出更多解决方案。