Skip to main content

Ajax refresh while persisting params

Javascript • Asked by shakycode

I'm maintaining an old Rails app and am trying to have a my index action use a form_tag to pass the params of a region so I can scope the results of calls by region. This works fine and dandy, but I need to figure out how to do an ajax refresh of the partials while persisting the params that come from the view.

Here's some code

index action on calls controller

  def index
    if params[:region].present?
      @assigned = Call.where(region_id: params[:region][:area]).assigned_calls.until_end_of_day
      @unassigned = Call.where(region_id: params[:region][:area]).unassigned_calls.until_end_of_day
      @note = Note.new
    else
      @assigned = Call.assigned_calls.until_end_of_day
      @unassigned = Call.unassigned_calls.until_end_of_day
     @note = Note.new
   end
  end

reload actions on calls controller

def reload_active
    if params[:region].present?
      @assigned = Call.where(region_id: params[:region][:area]).assigned_calls.until_end_of_day
      @unassigned = Call.where(region_id: params[:region][:area]).unassigned_calls.until_end_of_day
      @note = Note.new
    else
      @assigned = Call.assigned_calls.until_end_of_day
      @unassigned = Call.unassigned_calls.until_end_of_day
     @note = Note.new
   end
    render :partial => "calls/assigned_calls"
  end

  def reload_inactive
    if params[:region].present?
      @assigned = Call.where(region_id: params[:region][:area]).assigned_calls.until_end_of_day
      @unassigned = Call.where(region_id: params[:region][:area]).unassigned_calls.until_end_of_day
      @note = Note.new
    else
      @assigned = Call.assigned_calls.until_end_of_day
      @unassigned = Call.unassigned_calls.until_end_of_day
     @note = Note.new
   end
    render :partial => "calls/unassigned_calls"
  end

index.html.erb

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

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


<script>
$(document).ready(
         function() {
          setInterval(function() {
            $('#active').load('/calls/reload_active');
            $('#inactive').load('/calls/reload_inactive');
        }, 30000);
    });
</script>

routes.rb

resources :calls do
    collection do
      get 'reload_active'
      get 'reload_inactive'
    end
end

_assigned_calls.html.erb (excerpt of form_tag

 <%= form_tag calls_path, :method => 'get' do %>
 <%= select_tag "region[area]", options_from_collection_for_select(Region.order(:area), :id, :area, selected: params[:region].try(:[], :area)), prompt: "Choose Region" %>
 <%= submit_tag "Select", :name => nil, :class => 'btn' %>

So when I do an initial page load of /calls and then select the region and choose submit/select it will pass the params and load the calls by the region no problem.

The problem springs up when I'm doing the ajax refresh, it will not persist the params from the URL and I'm stumbling on how to pass them. The partials should refresh every 30 seconds and load call data scoped by region where the params were previously passed.

I'm doing some googling and stack review but figured I'd open the question here if anyone had any advice on how to do this. I'm sure it's possible but to be honest my JS/jQuery game is a bit weak.

Thanks in advance guys!


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 27,623+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.