2017-09-16 71 views
1

我想實現2個模型之間的某種關係。自定義關係類似於dependent destroy

我有2個型號:quizquestion有多對多的關係。 測驗模型有quiz_flag和問題模型有question_flag

我希望發生的事情是什麼時,quiz_flag更改爲真,每一個問題,那就是在直接關係(基本上是一個被包含在quiz內的每一個問題),也應該改變question_flag爲true。

邏輯與dependent: :destroy類似,但它是一個自定義函數,當quiz_flag爲真時,我想觸發它​​。 但我該怎麼做呢?

回答

1

您可以在模型中使用回調:before_update。 我會做這樣的事情:

class Quiz < ApplicationRecord 
before_update :update_question_flags, :if => :question_flag_changed? 

    def update_question_flags 
    self.questons.update_all(question_flag:true) 
    end 
end 
1

只需要添加額外的邏輯,以任何形式/行動負責設置測驗。

即:

if params[:quiz_flag] #if the quiz_flag params is set to true. 
    @quiz.questions.update_all(question_flag: true) 
end 

或者,如果它是多個控制器,你可以使用回調:

測驗型號:

before_save :some_method #will work before object is saved 

(既創建和更新工作,如果你只是想更新使用before_update)

def some method 
if self.quiz_flag == true 
    self.questons.update_all(question_flag:true) 
end 
end 

雖然我會提醒你使用回調。它可能會導致一些雜亂的代碼,以後很難再測試。

相關問題