Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax Rails将_链接到远程Put方法,但未刷新Nihlclass_Ajax_Ruby On Rails 3_Routes_Null_Link To - Fatal编程技术网

Ajax Rails将_链接到远程Put方法,但未刷新Nihlclass

Ajax Rails将_链接到远程Put方法,但未刷新Nihlclass,ajax,ruby-on-rails-3,routes,null,link-to,Ajax,Ruby On Rails 3,Routes,Null,Link To,我有一个Rails 3.2.14应用程序,在该应用程序中,我有通话、通话有单位、单位有状态,以及模型中的通话时间,例如in_service_time 我正在尝试编写一个名为in_service的控制器操作,它将设备状态更新为“in service”,并将时间戳call.in_service_time to time.zone.now,并通过put remote(Ajax)完成所有这些操作 到目前为止,我所写的似乎是通过更新设备状态和打电话的时间戳来实现的。但是使用:remote=>true不会呈

我有一个Rails 3.2.14应用程序,在该应用程序中,我有通话、通话有单位、单位有状态,以及模型中的通话时间,例如in_service_time

我正在尝试编写一个名为in_service的控制器操作,它将设备状态更新为“in service”,并将时间戳call.in_service_time to time.zone.now,并通过put remote(Ajax)完成所有这些操作

到目前为止,我所写的似乎是通过更新设备状态和打电话的时间戳来实现的。但是使用:remote=>true不会呈现我在in_服务操作中指定的部分。我必须等待屏幕通过index.html.erb中的getScript调用刷新,以更新调用状态。如果我使用:remote=>false,它会立即重新加载页面而不会出现问题。如果我使用:remote=>true,我还会在NihlClass的development.log中抛出一个异常

以下是相关代码的摘录,完整代码可在此处找到,以便于阅读:

index.html.erb

<div id="active">
  <%= render "assigned_calls" %>
</div>

<div id="inactive">
  <%= render "unassigned_calls" %>
</div>


<script>
  $(function() {
    setInterval(function(){
      $.getScript("/calls").fail(function(jqxhr, settings, exception) {
        window.location = "/users/sign_in?duplicate_session=true";
      });
    }, 10000);
  });
</script>
$("#active").html("<%= escape_javascript render("assigned_calls") %>");
$("#inactive").html("<%= escape_javascript render("unassigned_calls") %>");
<div class="page-header">
  <span class="badge badge-important"><%= @unassigned.count %></span> <strong>Unassigned calls</strong>
  <span class="badge badge-info"><%= @assigned.count %></span> <strong>Active calls</strong>
  <span class="badge badge-warning"><%= @scheduled.count %></span> <strong>Scheduled calls</strong>
  <%= render "search" %>
  <h2>Active Calls</h2>



</div>

<% @assigned.each do |call| %>
  <div class="widget">
    <div class="widget-header">
      <div class="pull-right">

        <%= link_to 'View', call, :class => 'btn btn-close'%>
        <% if dispatch? %>
        <%= link_to 'Edit', edit_call_path(call), :class => 'btn btn-close'%>
        <%= link_to 'Close', close_call_path(call), confirm: 'Are you sure you want to close the call?', :method => :post, :class => 'btn btn-danger' %>
        <%= link_to 'Cancel', cancel_call_path(call), confirm: 'Are you sure you want to cancel the call?', :method => :post, :class => 'btn btn-warning' %>
        <% end %>
      </div>
      <i class="icon-phone"></i>
      <h3><%= link_to call.incident_number, call %> <span><%= status(call) %></span></h3> 
      <% if call.traffic_type == "Emergency" %>
      <span class="badge badge-important"><%= call.traffic_type %></span>
      <% else %>
      <span class="badge badge-info"><%= call.traffic_type %></span>
     <% end %>
    </div>

    <div class="widget-content">
      <div class="row">
        <div class="span3">
         <h4>Patient Name: <small><%= call.patient_name %></small></h4>
          <div class="large-display">
            <% if call.call_status == "open" %>
            <div class="large <%= elapsed_overdue(call.elapsed_time) %>"><%= TimeFormatter.format_time(call.elapsed_time)%></div>
            <div class="small">Elapsed Time</div>
            <% else %>
              <% if call.closed_at? %>
            <div class="large <%= elapsed_overdue(call.run_time) %>"><%= TimeFormatter.format_time(call.run_time)%></div>
            <div class="small">Run Time</div>
              <% end %>
            <% end %>
          </div>
        </div>

        <div class="span2">
          <address>
            <strong><%= transferred_from(call) %></strong><br>
            <%= transferred_from_address(call) %>
          </address>
        </div>

        <div class="span1"><i class="icon-arrow-right dim"></i></div>

        <div class="span2">
          <address>
            <strong><%= transferred_to(call) %></strong><br>
            <%= transferred_to_address(call) %>
          </address>
        </div>

        <div class="span3">
          <% if call.service_level.level_of_service == "WC" %>
          <div class="left-icon dim"><i class="icon-user"></i></div>
          <% else %>
          <div class="left-icon dim"><i class="icon-ambulance"></i></div>
          <% end %>
          Assigned to <strong>Unit <%= call.units.map(&:unit_name).join(", ") %></strong><br />
          <% call.units.each do |unit| %>
            <div class="<%= set_status(unit.status) %>"><%= unit_status(unit) %></div>
          <% end %>
        </div>
      </div>

      <hr />

      <div class="row">
        <div class="span2">
          <div class="large-display">
            <div class="medium <%= transfer_due(call.transfer_date) %>"><%= call.transfer_date.strftime("%m/%d/%y %H:%M") %></div>
            <div class="small">Transfer Date</div>
          </div>
        </div>

        <div class="span1">
          <div class="large-display">
            <div class="small"><%= call.nature.try(:determinant) %></div>
            <div class="small">Nature</div>
          </div>
        </div>


        <div class="span5">
          <% if call.unit_ids.present? %>
            <div class="large-display">
              <div class="progress progress-striped"><%= progress_bar(call) %></div>
              <div class="small"><%= call.units.first.status.unit_status %></div>
              <div><%= link_to 'En Route', en_route_call_path(call), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true %><%= link_to 'On Scene', on_scene_call_path(call), :class => 'btn btn-primary btn-medium', :method => :put, :remote => true %><%= link_to 'To Hospital', to_hospital_call_path(call), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true %><%= link_to 'At Hospital', at_hospital_call_path(call), :class => 'btn btn-danger btn-medium', :method => :put, :remote => true %><%= link_to 'In Service', in_service_call_path(call), :class => 'btn btn-success btn-medium', :method => :put, :remote => true %></div>
              <div>ER: <%= call.en_route_time.try(:strftime, "%m/%d/%y-%k:%M") %> OS: <%= call.on_scene_time.try(:strftime, "%m/%d/%y-%k:%M") %> TO: <%= call.to_hospital_time.try(:strftime, "%m/%d/%y-%k:%M") %> AT: <%= call.at_hospital_time.try(:strftime, "%m/%d/%y-%k:%M") %>  IS: <%= call.in_service_time.try(:strftime, "%m/%d/%y-%k:%M") %></div>
            </div>
          <% end %>
        </div>



        <div class="span3">
          <div class="left-icon dim"><i class="icon-user"></i></div>
          <%= render partial: "medics_for_call", locals: {call: call} %>
        </div>
      </div>
    </div>
  </div>
<% end %>
呼叫_controller.rb摘录

resources :calls do
    member do
      post 'close'
      post 'cancel'
      post 'note'
      get 'opencall'
      get  'new_return'
      get 'duplicate_call'
      get 'edit_times'
      put 'update_billing'
      post 'dispatch_call'
      put 'en_route'
      put 'on_scene'
      put 'to_hospital'
      put 'at_hospital'
      put 'in_service'
    end
def in_service
    @call = Call.find(params[:id])
    @unit = @call.units.first
    @call.update_attributes(in_service_time: Time.zone.now)
    @call.save
    @unit.status = Status.find_by_unit_status("In Service")
    @unit.save
    respond_to do |format|
       format.html { redirect_to calls_url }
       format.js { render "index" }
     end
   end
NoMethodError - undefined method `count' for nil:NilClass:
  app/views/calls/_assigned_calls.html.erb:2:in `_app_views_calls__assigned_calls_html_erb___2549181816739942207_70125964034780'
\u assigned\u calls.html.erb

<div id="active">
  <%= render "assigned_calls" %>
</div>

<div id="inactive">
  <%= render "unassigned_calls" %>
</div>


<script>
  $(function() {
    setInterval(function(){
      $.getScript("/calls").fail(function(jqxhr, settings, exception) {
        window.location = "/users/sign_in?duplicate_session=true";
      });
    }, 10000);
  });
</script>
$("#active").html("<%= escape_javascript render("assigned_calls") %>");
$("#inactive").html("<%= escape_javascript render("unassigned_calls") %>");
<div class="page-header">
  <span class="badge badge-important"><%= @unassigned.count %></span> <strong>Unassigned calls</strong>
  <span class="badge badge-info"><%= @assigned.count %></span> <strong>Active calls</strong>
  <span class="badge badge-warning"><%= @scheduled.count %></span> <strong>Scheduled calls</strong>
  <%= render "search" %>
  <h2>Active Calls</h2>



</div>

<% @assigned.each do |call| %>
  <div class="widget">
    <div class="widget-header">
      <div class="pull-right">

        <%= link_to 'View', call, :class => 'btn btn-close'%>
        <% if dispatch? %>
        <%= link_to 'Edit', edit_call_path(call), :class => 'btn btn-close'%>
        <%= link_to 'Close', close_call_path(call), confirm: 'Are you sure you want to close the call?', :method => :post, :class => 'btn btn-danger' %>
        <%= link_to 'Cancel', cancel_call_path(call), confirm: 'Are you sure you want to cancel the call?', :method => :post, :class => 'btn btn-warning' %>
        <% end %>
      </div>
      <i class="icon-phone"></i>
      <h3><%= link_to call.incident_number, call %> <span><%= status(call) %></span></h3> 
      <% if call.traffic_type == "Emergency" %>
      <span class="badge badge-important"><%= call.traffic_type %></span>
      <% else %>
      <span class="badge badge-info"><%= call.traffic_type %></span>
     <% end %>
    </div>

    <div class="widget-content">
      <div class="row">
        <div class="span3">
         <h4>Patient Name: <small><%= call.patient_name %></small></h4>
          <div class="large-display">
            <% if call.call_status == "open" %>
            <div class="large <%= elapsed_overdue(call.elapsed_time) %>"><%= TimeFormatter.format_time(call.elapsed_time)%></div>
            <div class="small">Elapsed Time</div>
            <% else %>
              <% if call.closed_at? %>
            <div class="large <%= elapsed_overdue(call.run_time) %>"><%= TimeFormatter.format_time(call.run_time)%></div>
            <div class="small">Run Time</div>
              <% end %>
            <% end %>
          </div>
        </div>

        <div class="span2">
          <address>
            <strong><%= transferred_from(call) %></strong><br>
            <%= transferred_from_address(call) %>
          </address>
        </div>

        <div class="span1"><i class="icon-arrow-right dim"></i></div>

        <div class="span2">
          <address>
            <strong><%= transferred_to(call) %></strong><br>
            <%= transferred_to_address(call) %>
          </address>
        </div>

        <div class="span3">
          <% if call.service_level.level_of_service == "WC" %>
          <div class="left-icon dim"><i class="icon-user"></i></div>
          <% else %>
          <div class="left-icon dim"><i class="icon-ambulance"></i></div>
          <% end %>
          Assigned to <strong>Unit <%= call.units.map(&:unit_name).join(", ") %></strong><br />
          <% call.units.each do |unit| %>
            <div class="<%= set_status(unit.status) %>"><%= unit_status(unit) %></div>
          <% end %>
        </div>
      </div>

      <hr />

      <div class="row">
        <div class="span2">
          <div class="large-display">
            <div class="medium <%= transfer_due(call.transfer_date) %>"><%= call.transfer_date.strftime("%m/%d/%y %H:%M") %></div>
            <div class="small">Transfer Date</div>
          </div>
        </div>

        <div class="span1">
          <div class="large-display">
            <div class="small"><%= call.nature.try(:determinant) %></div>
            <div class="small">Nature</div>
          </div>
        </div>


        <div class="span5">
          <% if call.unit_ids.present? %>
            <div class="large-display">
              <div class="progress progress-striped"><%= progress_bar(call) %></div>
              <div class="small"><%= call.units.first.status.unit_status %></div>
              <div><%= link_to 'En Route', en_route_call_path(call), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true %><%= link_to 'On Scene', on_scene_call_path(call), :class => 'btn btn-primary btn-medium', :method => :put, :remote => true %><%= link_to 'To Hospital', to_hospital_call_path(call), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true %><%= link_to 'At Hospital', at_hospital_call_path(call), :class => 'btn btn-danger btn-medium', :method => :put, :remote => true %><%= link_to 'In Service', in_service_call_path(call), :class => 'btn btn-success btn-medium', :method => :put, :remote => true %></div>
              <div>ER: <%= call.en_route_time.try(:strftime, "%m/%d/%y-%k:%M") %> OS: <%= call.on_scene_time.try(:strftime, "%m/%d/%y-%k:%M") %> TO: <%= call.to_hospital_time.try(:strftime, "%m/%d/%y-%k:%M") %> AT: <%= call.at_hospital_time.try(:strftime, "%m/%d/%y-%k:%M") %>  IS: <%= call.in_service_time.try(:strftime, "%m/%d/%y-%k:%M") %></div>
            </div>
          <% end %>
        </div>



        <div class="span3">
          <div class="left-icon dim"><i class="icon-user"></i></div>
          <%= render partial: "medics_for_call", locals: {call: call} %>
        </div>
      </div>
    </div>
  </div>
<% end %>

您从未在
in_服务
操作中设置
@unassigned
。因此,向其发送
count
会引发异常

从其他动作呈现动作的视图(
呈现“索引”
)不会执行动作的控制器代码

编辑:如何使其干燥:

class CallsController < ApplicationController
  ...

  def index
    setup_scheduling_variables
    @units = Unit.order("unit_name")
    @overdue = @assigned.select{|call| call.elapsed_time > 3600}
    @inservice = Unit.in_service
  end


  def in_service
    ...
    respond_to do |format|
       format.html { redirect_to calls_url }
       format.js do 
         setup_scheduling_variables
         render "index" 
       end
     end
   end

private

  def setup_scheduling_variables
    @assigned = params[:search].present? ? Call.search(params[:search]) : Call.assigned_calls.until_end_of_day.order("transfer_date ASC")
    @unassigned = Call.unassigned_calls.until_end_of_day
    @scheduled = Call.scheduled_calls
  end
class CallsController3600}
@运行中=机组运行中
结束
def在用
...
回应待办事项|格式|
format.html{redirect_to calls_url}
format.js do
设置\u调度\u变量
渲染“索引”
结束
结束
结束
私有的
def设置_调度_变量
@赋值=参数[:搜索]。存在?Call.search(params[:search]):Call.assigned_calls.直到_day.order的_end_(“转账日期ASC”)
@unassigned=Call.unassigned\u calls.until\u结束\u天
@预定=呼叫。预定的呼叫
结束

你说得对!我是凭记忆写的,在一个一年没碰过的旧控制器上有一个这样的例子。最后,我不得不添加已分配、未分配和已调度的实例变量,这些变量是索引操作的一部分,以消除异常。现在,页面将通过Ajax/JS刷新,并且不会引发异常。谢谢你帮我记住这个惯例。我已经有一段时间没有接触代码了。新犯的错误(在我的控制器操作中,“在服务中”有没有更好、更干净的方法来写这篇文章?对我来说,这似乎很难。我的意思是它可以工作,但如果我可以的话,我想清理一下。是的,确保你保持它干净,将代码提取到一个私有共享方法会使它干净。我确实计划把它干掉。这是我的第一个Rails应用程序,我正在进行重构ing。我只是想知道是否有一种更干净的方式来编写in_service action。我所写的虽然有效,但肯定有一种更好的方式。谢谢你提供了一个干巴巴的例子,这真的很干净!