2017-10-20 9 views
-2

Je souhaite afficher un message d'alerte lorsque la condition donnée est en échec. Mon code est ....ajouter une condition de condition de suppression des rails et passer un message d'alerte à afficher

def delete 
    @items = PrdItem.find(params[:id]) 
    @item_odr=OdrOrderLine.where(prd_item_id: @items.id).pluck(:id) 

    if @item_odr!=null 
     @items.destroy 
     @vendor_id = UsrContactVendor.find_by_usr_contact_id(current_usr_contact.id).usr_vendor_property_id 
     redirect_to usr_vendor_property_path(@vendor_id) 
    else 
     flash[:notice] = "Cannot be deleted" 
     @vendor_id = UsrContactVendor.find_by_usr_contact_id(current_usr_contact.id).usr_vendor_property_id 
     redirect_to usr_vendor_property_path(@vendor_id) 
+0

Dans quel état? Qu'avez-vous essayé jusqu'à présent? Qu'est-ce qui ne fonctionne pas? –

+0

il ne montre pas le message d'alerte en vue –

+0

Prenez-vous à propos du 'flash [: notice]'? Ce n'est pas la même chose qu'un "message d'alerte", c'est pourquoi je ne le pensais pas. Où est votre code d'affichage? Vous devez fournir un [mcve] du problème; vous ne nous avez pas donné suffisamment d'informations pour répondre à votre question. –

Répondre

1

La réponse de OdrOrderLine.where(prd_item_id: @items.id).pluck(:id) fera toujours la condition @item_odr!=null return true. Tout d'abord, il est important de noter que null n'est pas un mot-clé Ruby, vous souhaitez probablement utiliser nil à la place. Cela ne génère pas d'erreur car il n'y a pas de variable locale null définie et donc null renvoie simplement nil. Mais cette ligne pourrait dérouter les autres développeurs. Deuxièmement, s'il n'y a pas d'enregistrement correspondant dans la base de données, OdrOrderLine.where(prd_item_id: @items.id).pluck(:id) retournera un tableau vide. Par conséquent, vous ne serez jamais capable d'entrer dans la branche else.

Peut-être quelque chose comme ceci est plus lisible:

def delete 
    @item = PrdItem.find(params[:id]) 

    if OdrOrderLine.where(prd_item_id: @item.id).any? 
    flash[:notice] = "Cannot be deleted" 
    # ... 

    else 
    @item.destroy 
    # ... 

Btw Je rebaptisés la variable @items à @item parce que find ne renvoie qu'un seul enregistrement.

+0

il est travaillé. Merci –

0

Si vous avez cela au début d'un formulaire, cela peut générer des messages d'erreur pour vous et vous permettre de garder votre contrôleur skinnier.

<% if @item.errors.any? %> 
     <h3><%= pluralize(@item.errors.count, "error") %> prohibited this record from being saved:</h3> 
     <ul> 
     <% @item.errors.full_messages.each do |message| %> 
     <li> 
      <%= message %> 
     </li> 
     <% end %> 
     </ul> 
     <% end %>