我有两个模型:
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.puzzles
或 Teacher.riddles
等。
正因为如此,当我来到 before_save
方法时,尝试调用 teacher
时,会失败,因为 teacher
> 与游戏
无关。
那么我怎样才能让我的全局 Game 类处理这个方法并仍然引用它的子级关联呢?
还有..
我刚刚意识到这个 before_save 实际上可能不会被调用,因为它不是正在更新的游戏模型(或者是?)。如果不是……同样的问题,我如何正确地全局化这个继承的方法?
或者..
我承认我的关联方式可能存在架构缺陷。有人会建议我直接从 Game
与 game_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/