2017-02-23 8 views
0

私はDueActionと呼ばれるテーブルを持っており、それはDueEmployeeDetailの参照を持っています。DueEmployeeDetailテーブルの参照を持つDueActionテーブルのすべてのエントリがtrueの場合のみ、DueEmployeeDetailのis_confimedカラムを更新する必要があります。 5つのエントリがあり、3つだけが真である場合、is_confirmedはtrueに更新されてはなりません。レールで真の値を見つける

in model i have written this :- 
 

 
def is_exist(due_employee_detail) 
 
    \t # byebug 
 
    \t flag = 0 
 
    DueAction.exists?(is_confirm: true,due_employee_detail_id: due_employee_detail) 
 
    flag 
 
    end 
 

 
in controller i have wriien this:- 
 

 
    if @due_action.is_exist(@due_action.due_employee_detail_id) 
 
    DueEmployeeDetail.where(id: @due_action.due_employee_detail_id).update_all(is_confirmed: true) 
 
    else 
 
    end 
 
    
 
    but its not working.Its checking only true not checking whether all are true or not. 
 

 

 
    
 
    
 

答えて

0

私はあなたのDBモデルの設計に慣れていると仮定しています。 私がそれをよく理解していれば、DueActionはDueEmployeeDetailの参照を持っています。コントローラーでそれをしない方がよいでしょう。このロジックをモデルに移すことができます。

class DueEmployeeDetail < ActiveRecord::Base 

    before_save :confirm!, if: :has_all_due_actions_confirmed? 

    def has_all_due_actions_confirmed? 
    due_actions.all?(&:is_confirmed) 
    end 

    def confirm! 
    self.is_confirmed = true 
    end 


end 
+0

このコントローラーにはどのようにアクセスできますか? –

+0

このメソッドは、DueEmployeeDetails "ライフサイクル"に含まれています。 saveを呼び出すと、このコールバックが自動的に実行されます。 'due_employee_detail = DueEmployeeDetail.find(some_id) due_employee_detail.save' 上記のロジックがトリガーされます – Codextremist

関連する問題