2012-12-28 22 views
5

Tôi đã sử dụng will_paginate gem cho trang chỉ mục pagination của test_app của tôi. Nó chỉ hiển thị các phiên đấu giá được liệt kê và tương ứng với từng phiên đấu giá có chức năng Chỉnh sửa, Phá hủy. Phân trang của tôi hoạt động tốt. Tôi có 6 phiên đấu giá trong tổng số được liệt kê theo cách thức bảng và khi tôi đặt per_page = 2, 3 trang ở đó. Nhưng khi tôi chỉnh sửa & Cập nhật phiên đấu giá ở trang 2 hoặc 3, nó chỉ chuyển đến trang đầu tiên sau khi hành động cập nhật. Tôi muốn điều đó để ở trên cùng một trang.Phân trang trong Rails - Luôn chuyển hướng đến trang đầu tiên sau khi chỉnh sửa/cập nhật phần tử thuộc các trang khác

My - 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 %> 

Mẫu My - Auction.rb

class Auction < ActiveRecord::Base 
    attr_accessible :name, :category, :item_id 
    self.per_page = 2 
end 

điều khiển của tôi - 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 

enter image description here

Vui lòng đề xuất giải pháp. Cảm ơn bạn.

+1

Không đặt lệnh khẩn cấp vào tên sách – simonmorley

Trả lời

2

Trong hành động update của bạn, bạn có id đấu giá, có bạn có thể tính toán trang mong đợi không. cho phù hợp và sử dụng redirect_to @auction,:page=>page_no

hoặc nếu không bạn sẽ phải gửi page tham số để trang chỉnh sửa từ chương trình (khi chỉnh sửa liên kết được nhấp) và sau đó đến các hành động cập nhật để sử dụng trang mà không phải chuyển hướng

+0

Cách chúng tôi có thể gửi page_no từ chương trình để chỉnh sửa? chúng ta có thể sử dụng biến dụ? –

+1

Đối với điều đó bạn sẽ phải sửa đổi liên kết của các nút chỉnh sửa và thêm pageno vào nó như 'edit_auction_path (đấu giá,: trang => pageno)' –

3

bạn cần phải giữ lại params [: trang] khắp chỉnh sửa/cập nhật các hoạt động và kết hợp nó với chuỗi truy vấn của bạn

+0

Bạn có thể vui lòng trả lời rõ ràng cách thực hiện –

+1

ví dụ: redirect_to @auction,: page => params [: page] – shweta

+0

Tôi cần xác định điều đó ở đâu? Tôi đang sử dụng định tuyến tài nguyên. –

0

bạn có thể sử dụng phương pháp TOTAL_PAGES trên biến dụ mà bạn đang sử dụng cho pagination.

bạn có thể tham khảo để biết chi tiết my answer

0

tôi đã sử dụng redirect_to: trở lại và nó được duy trì cùng một trang.

+1

Bạn có thể cung cấp một ví dụ về mã không? –

1

Đây là những gì phương pháp xóa của bạn sẽ giống như trong auctions_controller.rb nếu bạn muốn chỉ cần sử dụng: trở lại để chuyển hướng:

# DELETE /auctions/1 
    # DELETE /auctions/1.json 
    def destroy 
    @auction.destroy 
    respond_to do |format| 
     format.html { redirect_to :back } 
     format.json { head :no_content } 
    end 
    end 
0

câu trả lời trễ nhưng bạn có thể kiểm tra request.referrer nếu sẵn có của mình trước khi hiển thị chuyển hướng đến url deafault sử dụng một cái gì đó như thế này trong chỉnh sửa, cập nhật của bạn hoặc phá hủy hành động :

def destroy 
    @post.destroy 
    respond_to do |format| 
     format.html { redirect_to (request.referrer || posts_url), notice: 'Post was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

Bạn cũng có thể đọc như thế nào devise đá quý xử lý chuyển hướng trong this file here

1

Đây là giải pháp của tôi:

  1. Trong trang index của bạn trong đó có nút chỉnh sửa/cập nhật (thêm trang params)

    = link_to content_tag(:span, "", :class => "fa fa-edit") + t('btn.edit'), edit_bill_path(bill, page: params[:page] || 1), :class => "btn btn-warning" 
    
  2. Trong bạn tạo (thêm trang lĩnh vực ẩn)

    = f.input :page, as: :hidden, input_html: {value: params[:page]} 
    
  3. Trong bộ điều khiển của bạn (đường dẫn chuyển hướng tùy chỉnh với thông số trang)

    redirect_to your_path(page: params[:your_form_name_instance][:page]), notice: t('messages.update') 
    
  4. Enjoy :)

0

tôi thấy cách tốt nhất để làm điều này là sử dụng redirect_back trong Rails 5 +.

Ví dụ:

# DELETE /guests/1 
# DELETE /guests/1.json 
def destroy 
    @guest.destroy 
    respond_to do |format| 
    format.html { redirect_back(fallback_location: guests_url, notice: 'Guest was successfully destroyed.') } 
    format.json { head :no_content } 
    end 
end 

Về cơ bản nó chuyển hướng đến giới thiệu mà đề cập đến phá hủy hành động. Nếu không có giới thiệu fallback_location được sử dụng. Ví dụ tôi có dạng nút đơn trên trang chỉ mục của tôi liệt kê khách và khi nút hủy được nhấp vào Tôi được chuyển hướng trở lại trang nơi khách được liệt kê, thông số page được bao gồm!