5

我使用will_paginate gem 对我的 test_app 的索引页进行分页。它只显示列出的拍卖,并且与每个拍卖相对应,有编辑、销毁功能。我的分页运行良好。我总共有 6 次拍卖以表格的方式列出,当我输入 per_page = 2 时,有 3 页。但是,当我在第 2 或第 3 页编辑和更新拍卖时,它只会在更新操作后进入第一页。我希望它保持在同一页面上。

我的观点 - 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 %>

我的模特 - Auction.rb

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

我的控制器-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

在此处输入图像描述

请提出解决方案。谢谢你。

4

8 回答 8

3

您需要在整个编辑/更新操作中保留params[:page]并将其与您的查询字符串合并

于 2012-12-28T05:45:40.493 回答
2

在您的update操作中,您有拍卖 ID,您可以在那里计算预期的页码。相应地并使用 redirect_to @auction,:page=>page_no

否则您必须将page参数从节目发送到编辑页面(单击编辑链接时),然后发送到更新操作以使用该页面不重定向

于 2012-12-28T05:42:42.340 回答
2

这是我的解决方案:

  1. 在具有编辑/更新按钮的索引页面中(添加参数页面)

    = 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. 在您的表单中(添加隐藏字段页面)

    = f.input :page, as: :hidden, input_html: {value: params[:page]}
    
  3. 在您的控制器中(带有页面参数的自定义重定向路径)

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

于 2017-08-19T04:58:13.687 回答
1

如果您只想使用 :back 进行重定向,那么这就是您的删除方法在 auctions_controller.rb 中的样子:

   # 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
于 2014-02-14T17:44:03.107 回答
0

您可以在用于分页的实例变量上使用方法total_pages 。

详情可以参考我的回答

于 2013-07-08T07:58:48.680 回答
0

我使用{ redirect_to :back }它并保持相同的页面。

于 2013-10-04T13:28:41.567 回答
0

迟到的答案,但您可以在显示重定向到默认网址之前检查request.referrer它是否可用,在您的编辑、更新或销毁操作中使用类似这样的内容:

  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

您还可以在此处阅读devisegem 如何处理此文件中的重定向

于 2016-06-22T15:08:28.797 回答
0

我发现最好的方法是redirect_back在 Rails 5+ 中使用。

例子:

# 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

基本上,它重定向到引用破坏操作的引用者。如果没有引荐来源网址fallback_location,则使用。例如,我的索引页面上有列出来宾的单按钮表单,当单击销毁按钮时,我被重定向回列出来宾的页面,page包括参数!

于 2017-10-23T20:43:38.277 回答