gpt4 book ai didi

ruby-on-rails - 在数据库中存储类名以模仿设计模式 - Ruby on Rails

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:12 25 4
gpt4 key购买 nike

我正在寻找在我的一个正在运行的项目中实现策略设计模式。基本上我必须在数据库中由单个字段区分的对象上调用方法,这种差异将确保不同的方法行为。

经过一番研究,我发现ruby很少需要设计模式,它使用的是duck-typing。现在为了达到同样的效果,我正在考虑将类名存储在数据库中并在需要时调用该类的方法。像这样,

duckOne = Duck.find(id)
duckOne[:className].fly(duckOne) #This scenario is same as Class.fly,but class is coming from db

duckTwo = Duck.find(id)
duckTwo[:className].fly(duckTwo) #Similar to above, just a different class from database

有更好的方法吗?这种方法是否正确?

最佳答案

基本上,根据您的描述,我认为您正在寻找 Single Table Inheritance (STI) (您可能需要滚动才能找到信息)。

通过 STI,您可以使用一个数据库表来表示从同一父类(super class)派生的多个类。 Rails 使用名为 type 的列来了解将数据库行解释为哪个类。

您仍然可以在父类(super class)上使用find 方法来查找各种子类模型。

例如:

class Bird < ActiveRecord::Base
def quack
"quack"
end
end

class Duck < Bird
def quack
"foo"
end
end

class Goose < Bird
def quack
"bar"
end
end

duck = Duck.create
goose = Goose.create

Bird.find(duck.id).quack
# => "foo"
Bird.find(goose.id).quack
# => "bar"

关于ruby-on-rails - 在数据库中存储类名以模仿设计模式 - Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137638/

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