ruby-on-rails - 如何从父模型类调用 before_save 方法?

标签 ruby-on-rails mongodb inheritance model relation

我有两个模型:

class Game
  before_save :update_teacher
    teacher
  end

  def update_teacher
    teacher.update_attribute("something", true)
  end
end

class Puzzle < Game
  belongs_to :teacher
end

我有很多类型的游戏。当任何游戏完成时,我想更新_老师。

但如你所见,游戏不属于任何人。这就是我保存所有游戏的所有全局方法的地方。我永远不需要查询Teacher.games。相反,我只需要查询 Teacher.puzzlesTeacher.riddles 等。

正因为如此,当我来到 before_save 方法时,尝试调用 teacher 时,会失败,因为 teacher > 与游戏无关。

那么我怎样才能让我的全局 Game 类处理这个方法并仍然引用它的子级关联呢?

还有..

我刚刚意识到这个 before_save 实际上可能不会被调用,因为它不是正在更新的游戏模型(或者是?)。如果不是……同样的问题,我如何正确地全局化这个继承的方法?

或者..

我承认我的关联方式可能存在架构缺陷。有人会建议我直接从 Gamegame_type 创建两个关联,甚至只是一个关联。不确定什么会更好,什么会更坏。

最佳答案

如果每个游戏都有一个老师,则 belongs_to :teacher 应该位于 Game 类中,而不是位于子类中。

当您在Game中添加before_save并保存Puzzle时,它会从Game 因为 Puzzle 是一个游戏,但 Game 不了解 :teacher

请更新您的问题,并更详细地描述您想要完成的任务,而不是具体情况。

更新

您可以做的是拥有一个在父类上调用并由子类覆盖的方法

class A
  before_save :do_x

  def do_x
    raise "Please implement this!"
  end
end

class B < A
   def do_x
     # do what B has to do
   end
end 

关于ruby-on-rails - 如何从父模型类调用 before_save 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11328460/

相关文章:

ruby-on-rails - 为什么 ||和/或在 rails 中表现不同?

ruby-on-rails - 解决方案或 sphinx ?哪个更好?

ruby-on-rails - Mongoid 5 : find_one_and_update with returnNewDocument

mongodb - 在 MongoDB 中,如何根据嵌入对象中的属性对文档进行排序?

具有智能指针的 C++11 复合模式

c# - 继承和new关键字

mysql - gem install mysql2 不起作用

node.js - 字符串数组上的 MongoDB 全文搜索

mongodb - 如何分组 mongodb - mapReduce 输出?

Java:如何构造或模式化一个类,以便我们可以在运行时映射组合对象?