2017-07-13 11 views
0

私は私のレールアプリでKaminari Gemを使用しています。2ページ目の最後のレコードを削除すると、1ページに戻る

私は適切なナビゲーションメニューを持つ現在のインデックスページを持っています。

def index 
    @dogs = Dog.all.page(params[:page]).per(20) 
end 


def destroy 
    if @dog.destroy 
    # use this so that if the page got other records, the user got to stay at that navigated page. 
    redirect_back fallback_location: dogs_path, flash: { success: 'deleted dog from list' } 
    else 
    # show some errors 
    end 
end 

ユーザーがページ2にあり、21日の犬のレコードを削除すると、レコードが削除されたとブラウザがいないレコードに空白のページが表示されたURLが/dogs?page=2を指定している原因となります。

これは既定の動作かカミナリですか、私の方法に何か問題がありますか?現在のページにはレコードが1つもないので、カミナリがユーザーを1ページ前にリダイレクトすることを期待していました。

ありがとうございました。

答えて

1

は、私はレコードがそのパルティに残っていたときに、ユーザーが同じページページネーションに残りたいあなたはdogs_path

def destroy 
    if @dog.destroy 
    page = params[:page] 
    #this is to check if we have more elements on the page or not 
    @dogs = Dog.all.page(page).per(20) 
    if @dogs.length == 0 
     page = (page - 1) > 1 ? page - 1 : 1 
    end 
    redirect_to dogs_path(page: page) 
    else 
    # show some errors 
    end 
end 
+0

ありがとう!この回答は、私がその行動を望むものに最も近いものです。 Kaminari Gemがなぜ私たちのためにライブラリからこれをしないのか不思議です。リダイレクトする前にデータベースに別のクエリが必要なためかもしれません... – user3920567

0

削除操作の完了後にインデックスURLを定義する必要があります。私はあなたが以下を行ったと確信しています。

redirect_to :backと同じページに残ります。

戻るの代わりに、インデックスページのURLを使用する必要があります。

+0

として犬のインデックスページのパスを持って考えてみましょうcularページ。たとえば、25番目のページに移動し、そのページの最初のレコードを削除するとします。その後、ユーザーは最初のページにリダイレクトされ、他のレコードを削除するために25ページを再度ナビゲートする必要があります。 – user3920567

0

一般的に、Rails 5では、redirect_back(the_path_that_you_want) このようにすることを考えていますが、空の場合でも同じページにリダイレクトされます。うーん..あなたは以下のrequest.refererを使用することができます

def delete 
    ... 
    prev_page = Dogs.page(params[:page]).per(20).count < 1 ? params[:page].to_i - 1 : params[:page] 
    redirect_back(fallback_location: dogs_path(page: prev_page, notice: "...", anchor: "if_you_wanted_to")) 
end 
0

は、あなたがセッションでリファラを保存する最初の、破壊するためのサンプルです[:return_to] = request.referrer、そして後に破壊するあなたはredirect_toセッションに戻って前のページに戻ります.delete(:return_to)

def destroy 
    session[:return_to] = request.referrer 
    .... 
    @dog.destroy 
    if session[:return_to] 
    redirect_to session.delete(:return_to) 
    else 
    redirect_to dogs_path 
    end 
end 
関連する問題