ruby-on-railsajaxkaminari

Ruby on Rails 6. Using Ajax after redirection


Say, I have users list on the '/users' page and 2 actions for the 'user' entity: 'index' (with using of Ajax) and 'destroy'.

  def index
      ...    
      respond_to do |format|
        format.html
        format.js
      end
  end

  def destroy
    ...    
    redirect_to users_url
  end

I want to destroy a user (right from the '/users' page) and use Ajax of the 'index' action after that ('index.js.erb' file) in order to render only a part of the opened '/users' page.

Is it possible to do that?


My current solution right now is to use Ajax for 'destroy' action (a separate 'destroy.js.erb' file) and duplicate needed changes for 'index' page there. But, first of all, it's a code duplication, and second, in this case my pagination links are broken (I use 'Kaminari' gem and looks like it works fine only with 'get' requests, at least by default).


There is a 'view' part of updating with Ajax, if necessary:

   <div id="users_table">     
      <table class="table table-hover table-borderless">
        ...
        <tbody>
          <%= render @users %>
        </tbody>
      </table>
    
      <div><%= paginate @users, remote: true %></div>
   </div> 

Solution

  • If you want the destroy action to render the index.js.erb:

    def destroy
      ...
      respond_to do |format|
        format.js { render action: :index}
        format.html { redirect_to users_url}
      end
    end
    

    But, to render index.js you will need to, in your destroy action, rebuild the @users object and ensure you're rebuilding it for the correct page. So, when you call the destroy action you'll need to pass the ID(s) of the user(s) you want to destroy, as well as the page you are on.