У меня есть приложение Rails 3.2.22, которое отслеживает вызовы отправки и каждый вызов принадлежит региону, и регион имеет много вызовов. В моих представлениях у меня первоначально были все звонки со всех регионов, но теперь я фильтрую по регионам, используя простой form_tag в представлении и передавая идентификатор региона в качестве параметра для контроллера и обратно в представление.Фильтрация по параметрам работает в разработке, но не в производстве
Так локально, если я попал в индексном просмотре вызовов Я вызовет URL вроде:
http://loopify.xyz:9001/calls?utf8=%E2%9C%93®ion=1
Что будет в моих взглядах показать мне все звонки с регионом идентификатором «1». Я могу переключиться на разные регионы в представлениях и отобразить соответствующие отфильтрованные вызовы по регионам.
Когда я разворачивал это мой перевалочный сервер, фильтрация PARAMS не работает на всех, и показывает все вызовы, даже если когда я выбираю область я получить URL, как:
http://staging.example.com/calls?utf8=%E2%9C%93®ion=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
Вы проверяете базу данных для записей с недопустимыми данными или что-то в этом роде? Откройте 'rails c' и попытайтесь получить все вызовы по региону id и посмотрите, соответствует ли он тому, что вы думаете о своем коде. Сравните результаты на вашей машине-разработчике и в вашей промежуточной машине. Это единственное, о чем я могу думать. – MurifoX
@MurifoX Это одна из первых вещей, которые я проверил, но вот что. Моя промежуточная база данных - это живая копия производства, которая также дублируется на моей машине dev. Поэтому я не думаю, что это проблема с данными. Это похоже на то, что он игнорирует фильтрацию параметров вместе, хотя запросы выполняются должным образом. – nulltek