I have used will_paginate gem for paginating index page of my test_app. It just shows the auctions listed and corresponding to each auction there is Edit, Destroy functionalities. My pagination is working good. I have 6 auctions in total listed in a table manner and as I put per_page = 2, 3 pages are there. But when I edit & Update the Auction in page 2 or 3, it just goes to 1st page after update action. I want that to stay on the same page.
My View - Index.html.erb
<h1>Listing auctions</h1>
<table>
<tr>
<th>Name</th>
<th>Category</th>
<th>Item</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @auctions.each do |auction| %>
<tr>
<td><%= auction.name %></td>
<td><%= auction.category %></td>
<td><%= auction.item_id %></td>
<td><%= link_to 'Show', auction %></td>
<td><%= link_to 'Edit', edit_auction_path(auction) %></td>
<td><%= link_to 'Destroy', auction, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<br />
<%= will_paginate @auctions %>
<%= link_to 'New Auction', new_auction_path %>
<%= link_to 'Back to Home', home_path %>
My Model - Auction.rb
class Auction < ActiveRecord::Base
attr_accessible :name, :category, :item_id
self.per_page = 2
end
My Controller - auctions_controller.rb
class AuctionsController < ApplicationController
# GET /auctions
# GET /auctions.json
def index
@auctions = Auction.paginate(:page => params[:page])#pagination for Index
#@posts = Post.paginate(:page => params[:page])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @auctions }
end
end
# GET /auctions/1
# GET /auctions/1.json
def show
@auction = Auction.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @auction }
end
end
# GET /auctions/new
# GET /auctions/new.json
def new
@auction = Auction.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @auction }
end
end
# GET /auctions/1/edit
def edit
@auction = Auction.find(params[:id])
end
# POST /auctions
# POST /auctions.json
def create
@auction = Auction.new(params[:auction])
respond_to do |format|
if @auction.save
format.html { redirect_to @auction, notice: 'Auction was successfully created.' }
format.json { render json: @auction, status: :created, location: @auction }
else
format.html { render action: "new" }
format.json { render json: @auction.errors, status: :unprocessable_entity }
end
end
end
# PUT /auctions/1
# PUT /auctions/1.json
def update
@auction = Auction.find(params[:id])
respond_to do |format|
if @auction.update_attributes(params[:auction])
format.html { redirect_to @auction, notice: 'Auction was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @auction.errors, status: :unprocessable_entity }
end
end
end
# DELETE /auctions/1
# DELETE /auctions/1.json
def destroy
@auction = Auction.find(params[:id])
@auction.destroy
respond_to do |format|
format.html { redirect_to auctions_url }
format.json { head :no_content }
end
end
end
Please suggest a solution. Thank you.
You need to retain params[:page] throughout edit/update operations and merge it with your query string
In your update
action, you have the auction id, there you can calculate the expected page no. accordingly and use
redirect_to @auction,:page=>page_no
or otherwise you would have to send the page
parameter to the edit page from the show(when edit link is clicked) and then to the update action to use that page no to redirect
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With