我想在两个模型之间实现某种关系。
我有2个模型:quiz
和question
,它们具有多对多的关系。
测验模型有quiz_flag
,问题模型有question_flag
。
我想要发生的是当quiz_flag
更改为true时,每个直接关系的问题(基本上每个问题都包含在quiz
中)也应该更改{{1}到真。
逻辑类似于question_flag
,但它是我想在dependent: :destroy
变为真时触发的自定义函数。
但我该怎么做呢?
答案 0 :(得分: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 :(得分:1)
您可以向负责设置测验的任何表单/操作添加其他逻辑。
I.e。:
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
我会提醒您使用回调。它可能导致一些混乱的代码,以后很难测试。