2016-07-11 2 views
0

У меня есть приложение Rails 3.2.22, которое отслеживает вызовы отправки и каждый вызов принадлежит региону, и регион имеет много вызовов. В моих представлениях у меня первоначально были все звонки со всех регионов, но теперь я фильтрую по регионам, используя простой form_tag в представлении и передавая идентификатор региона в качестве параметра для контроллера и обратно в представление.Фильтрация по параметрам работает в разработке, но не в производстве

Так локально, если я попал в индексном просмотре вызовов Я вызовет URL вроде:

http://loopify.xyz:9001/calls?utf8=%E2%9C%93&region=1 

Что будет в моих взглядах показать мне все звонки с регионом идентификатором «1». Я могу переключиться на разные регионы в представлениях и отобразить соответствующие отфильтрованные вызовы по регионам.

Когда я разворачивал это мой перевалочный сервер, фильтрация PARAMS не работает на всех, и показывает все вызовы, даже если когда я выбираю область я получить URL, как:

http://staging.example.com/calls?utf8=%E2%9C%93&region=1 

Здесь индекс действие моего контроллера вызовов:

def index 
    if params[:region].present? 
    @region = params[:region] 
    @assigned = Call.includes(:units, :transferred_from, :transferred_to, :nature, :region, :service_level).where(region_id: params[:region]).assigned_calls.until_end_of_day 
    @unassigned = Call.includes(:units, :transferred_from, :transferred_to, :nature, :region, :service_level).where(region_id: params[:region]).unassigned_calls.until_end_of_day 
    else 
    params[:region] = "1" 
    @assigned = Call.includes(:units, :transferred_from, :transferred_to, :nature, :region, :service_level).where(region_id: params[:region]).assigned_calls.until_end_of_day 
    @unassigned = Call.includes(:units, :transferred_from, :transferred_to, :nature, :region, :service_level).where(region_id: params[:region]).unassigned_calls.until_end_of_day 
    end 
    @note = Note.new 
    @units = Unit.active.order("unit_name").map{|unit| unit.calls.where(call_status: "open").empty? ? ["#{unit.unit_name} #{unit.unit_type.unit_type} #{unit.status.unit_status}", unit.id] : ["#{unit.unit_name} (on call) #{unit.unit_type.unit_type} #{unit.status.unit_status}", unit.id] } 
    end 

Вот мой взгляд index.html.erb:

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

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


<script> 
    $(function() { 
    setInterval(function(){ 
     $.getScript('/calls/?region=<%= params[:region] %>') 
    }, 20000); 
    }); 
</script> 

Вот index.js.erb файл, чтобы обновить Аякс и JS

$("#active").html("<%= escape_javascript render("assigned_calls") %>"); 
$("#inactive").html("<%= escape_javascript render("unassigned_calls") %>"); 

Вот выдержка из назначенных частично. Как назначенные, так и неназначенные действительно большие, чтобы отображать здесь целиком, но будут рады предоставить их в github gist, если вам нужно больше контекста.

<div class="page-header well"> 
    <h3><%= pluralize(@assigned.size, "Active Call") %></h3> 
</div> 
<%= form_tag calls_path, :method => 'get' do %> 
    <%= select_tag "region", options_from_collection_for_select(Region.order(:area), :id, :area, selected: @region), prompt: "Choose Region" %> 
    <%= submit_tag "Select", :name => nil, :class => 'btn' %> 
<% end %> 
<% @assigned.each_with_index do |call, index| %> 
    <div class="widget"> 
    <div class="widget-header"> 
     <div class="pull-right"> 

     <%= link_to 'View', call, :class => 'btn btn-primary btn-small'%> 
     <% if dispatch? || admin? || manager? || operations? %> 
     <%= link_to 'Edit', edit_call_path(call), :class => 'btn btn-info btn-small'%> 
     <%= link_to "Close", '#close-modal', data: {toggle: "modal", target: "#close-modal#{index}" }, class: 'btn btn-small btn-warning' %> 
     <%= render 'layouts/close_call_modal', call: call, index: index %> 
     <%= link_to "Cancel", '#cancel-modal', data: {toggle: "modal", target: "#cancel-modal#{index}" }, class: 'btn btn-small btn-danger' %> 
     <%= render 'layouts/cancel_call_modal', call: call, index: index %> 
     <%= link_to "Notes", '#note-modal', data: {toggle: "modal", target: "#note-modal#{index}" }, class: 'btn btn-small btn-primary' %> 
     <%= render 'layouts/note_modal', call: call, index: index %> 
     <% end %> 
     </div> 
     <i class="icon-phone"></i> 
     <h3><%= link_to call.incident_number, call %> <span><%= status(call) %></span></h3> 
     <% if call.wait_return == "yes" && call.parent_call_id == nil %> 
     <i class="icon-arrow-right dim"></i> <span class="badge badge-important" >Initial Transport</span> 
     <% end %> 
     <% if call.wait_return == "yes" && call.parent_call_id.present? %> 
     <i class="icon-arrow-left dim"></i> <span class="badge badge-important" >Return Transport</span> 
     <% end %> 
     <% 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 %> 
    <span class="badge badge-primary" ><%= call.region.try(:area) %></span> 
    <span class="badge badge-info" ><%= call.service_level.try(:level_of_service) %></span> 
    </div> 
<% end %> 

Я действительно не уверен, в чем проблема. В разработке я обслуживаю приложение с Thin, в стадии разработки я использую пассажирские и nginx.

Есть ли что-то в моем коде, которое не будет работать в производственной среде, которую мне не хватает?

Напомним, что фильтрация области отлично работает в разработке, но после развертывания для фильтрации фильтра не работает.

Я порылся в журналах и вот запрос как от разработчика (местные) и прод (постановка) журналы:

Dev:

Started GET "/calls/?region=1&_=1468278029235" for 127.0.0.1 at 2016-07-11 18:00:29 -0500 
Processing by CallsController#index as JS 

прод:

Started GET "/calls/?region=1&_=1468278074295" for 192.168.130.1 at 2016-07-11 18:01:14 -0500 
Processing by CallsController#index as JS 
+0

Вы проверяете базу данных для записей с недопустимыми данными или что-то в этом роде? Откройте 'rails c' и попытайтесь получить все вызовы по региону id и посмотрите, соответствует ли он тому, что вы думаете о своем коде. Сравните результаты на вашей машине-разработчике и в вашей промежуточной машине. Это единственное, о чем я могу думать. – MurifoX

+0

@MurifoX Это одна из первых вещей, которые я проверил, но вот что. Моя промежуточная база данных - это живая копия производства, которая также дублируется на моей машине dev. Поэтому я не думаю, что это проблема с данными. Это похоже на то, что он игнорирует фильтрацию параметров вместе, хотя запросы выполняются должным образом. – nulltek

ответ

0

I «Не знаю, почему это происходит и работает, но это так. Если я изменю уровень журнала в production.rb из info для отладки, фильтрация параметров работает нормально. Я видел ссылку на это по старой проблеме github. Ядро Rails закрыло его как не-ошибку, но, очевидно, что-то в этом. К сожалению, 3.2 больше не поддерживается, поэтому этот «взлом» придется делать. Теперь пришло время обновить приложение до 4.2.6.