gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:59:43 39 4
gpt4 key购买 nike

我有两个模型:

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。

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

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

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

还有..

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

或者..

我承认,我处理协会的方式可能存在架构缺陷。有人会建议我从 Game 中直接使用 game_type 创建两个关联,甚至只创建一个关联吗?不确定什么会更好或更坏。

最佳答案

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

当您在 Game 中添加 before_save 并保存 Puzzle 时,它将调用 before_save 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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com