5

test_appのインデックス ページのページネーションにwill_paginate gem を使用しました。リストされているオークションが表示され、各オークションに対応する編集、破棄機能があります。私のページネーションはうまくいっています。全部で 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

私のコントローラー -uctions_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 に答える
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

私は使用{ redirect_to :back }し、同じページを維持しました。

于 2013-10-04T13:28:41.567 に答える
0

ページネーションに使用しているインスタンス変数でメソッドtotal_pagesを使用できます。

詳細については私の回答を参照してください

于 2013-07-08T07:58:48.680 に答える
0

遅い回答ですがrequest.referrer、編集、更新、または破棄アクションで次のようなものを使用して、デフォルトの URL へのリダイレクトを表示する前に、利用可能かどうかを確認できます。

  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 に答える