2017-07-13 4 views
0

J'utilise les applications Kaminari Gem on my rails.Lors de la suppression du dernier enregistrement à la page 2, naviguez vers la page 1

J'ai la page d'index en cours avec les menus de navigation appropriés.

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 

Lorsque l'utilisateur est à la page 2 et la suppression du 21e record du chien, l'enregistrement a été supprimé et le navigateur affiche une page blanche sans enregistrement, l'URL spécifie /dogs?page=2.

Est-ce le comportement par défaut ou Kaminari ou j'ai quelque chose de mal sur ma méthode? Je m'attendais à ce que Kaminari redirige l'utilisateur sur une page avant car la page actuelle ne contient aucun enregistrement.

Merci.

Répondre

1

Considérez vous avez des chiens chemin de la page d'index 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

Merci! Cette réponse est la plus proche de ce que je voulais que le comportement soit. Je me demande pourquoi Kaminari Gem ne le fait pas pour nous hors de la bibliothèque. Peut-être parce qu'il a besoin d'une autre requête à la base de données avant la redirection ... – user3920567

0

Vous devez définir l'URL de l'index après la fin de l'opération de suppression. Je suis sûr que vous avez fait ce qui suit.

redirect_to :back et il reste sur la même page.

Au lieu de retour, vous devez utiliser l'URL de la page d'index.

+0

Je veux que l'utilisateur de rester sur la même pagination de page lorsque il y a encore des documents sur ce parti page culaire. Par exemple, imaginez que vous accédez à la page 25 et supprimez le premier enregistrement de cette page. Ensuite, l'utilisateur a été redirigé vers la 1ère page et il doit de nouveau parcourir 25 pages pour supprimer les autres enregistrements. – user3920567

0

Généralement, dans Rails 5, vous pouvez maintenant utiliser redirect_back(the_path_that_you_want) Im pensant à le faire de cette façon, mais toujours rediriger vers la même page lorsqu'il est vide. Hmm ..

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

vous pouvez utiliser request.referer ci-dessous est l'échantillon pour détruire, d'abord vous enregistrer la referer avec la session [: return_to] = request.referrer, puis une fois que vous revenez à destroy page précédente avec la session de 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