2017-02-23 11 views
0

У меня есть таблица под названием DueAction, и у нее есть ссылка DueEmployeeDetail. Мне нужно обновить столбец is_confimed для параметра DueEmployeeDetail только тогда, когда все записи таблицы DueAction, имеющие ссылку таблицы DueEmployeeDetail, верны. Например. если есть 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 «жизненный цикл». Всякий раз, когда вы вызываете сохранение на нем, эти обратные вызовы будут автоматически запускаться. 'due_employee_detail = DueEmployeeDetail.find (some_id) due_employee_detail.save' вызовет указанную логику – Codextremist

Смежные вопросы