2017-10-20 5 views
-2

指定された条件が満たされていないときに警告メッセージを表示します。私のコードはrails delete関数にif条件を追加し、表示する警告メッセージを受け取ります

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

どのような状態ですか?これまでに何を試しましたか?何がうまくいかないの? –

+0

警告メッセージが表示されません –

+0

あなたは 'flash [:notice]'について考えていますか?これは「警告メッセージ」と同じではないので、私はそう思わないのです。あなたのビューコードはどこですか?あなたは問題の[mcve]を提供する必要があります。あなたは私たちにあなたの質問に答えるのに十分な情報を与えていない。 –

答えて

1

OdrOrderLine.where(prd_item_id: @items.id).pluck(:id)の応答は常に条件@item_odr!=nullリターンは本当でしょう....です。

最初に、nullはRubyキーワードではないことに注意してください。nilを代わりに使用することをお勧めします。ローカル変数nullが定義されていないため、nullが単にnilを返すため、これはエラーを発生させません。しかし、この行は他の開発者と混乱するかもしれません。

第2に、一致するレコードがデータベースにない場合、OdrOrderLine.where(prd_item_id: @items.id).pluck(:id)は空の配列を返します。したがって、あなたはelseブランチに入ることはできません。

おそらく、このようなものは、より読みやすいです:

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

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

    else 
    @item.destroy 
    # ... 

はところで、私は1つのレコードのみ@itemfindので、戻りに@items変数の名前を変更しました。

+0

が働いています。ありがとう –

0

フォームの先頭にこれがある場合は、エラーメッセージが表示され、コントローラのスキンを維持できます。

<% 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 %> 
関連する問題