自定义关系类似于依赖性破坏

时间:2017-09-16 18:52:32

标签: ruby-on-rails ruby web model-view-controller

我想在两个模型之间实现某种关系。

我有2个模型:quizquestion,它们具有多对多的关系。 测验模型有quiz_flag,问题模型有question_flag

我想要发生的是当quiz_flag更改为true时,每个直接关系的问题(基本上每个问题都包含在quiz中)也应该更改{{1}到真。

逻辑类似于question_flag,但它是我想在dependent: :destroy变为真时触发的自定义函数。 但我该怎么做呢?

2 个答案:

答案 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

我会提醒您使用回调。它可能导致一些混乱的代码,以后很难测试。