0

在 ruby​​ 脚本中,我正在运行一个循环,在该循环中,我从表列表中动态获取表名,并且必须对其执行某种 CRUD 操作(主要是插入)。我正在使用 Sequel Orm 并为各种表格创建了模型。如何找到每个表的模型名称以便执行插入?

    表=["table1","table2",'table3",...]
    表。每个都做|t|
    #在t上执行插入
    #如何找到表t的模型名称?
    结尾

我可以使用散列来存储每个表的模型名称,或者可以遵循将每个表的第一个字符转换为大写或类似的模式。

有一个更好的方法吗?

4

2 回答 2

1

在一般情况下,如果没有蛮力搜索,您要问的问题是不可能的,即使那样它也是模棱两可的,原因很简单,以下是有效的:

class Foo < Sequel::Model(:table1); end
class Bar < Sequel::Model(:table1); end

基本上,每个模型都有一个相关的数据集(通常只是一个简单的 SELECT * FROM 表)。但是,其他模型可以使用相同或相似的数据集。所以从模型到表很简单,但从表到模型却不是。

如果您已经创建了自己的模型,那么处理您想要的最简单的方法是使用哈希:

ModelMap = {}
ModelMap["table1"] = Model1
ModelMap["table2"] = Model2

然后你可以这样做:

ModelMap[t]

在每个块中获取模型类。

于 2012-02-23T16:36:05.903 回答
0

只要在模型和表之间遵循复数约定,从表名中获取模型名的一种方法是:

table_name = :users
table_name.to_s.classify 

但是,看起来这不是您想要做的。您需要插入新的或更新现有的记录。由于您已经有了表名,您可能希望考虑执行以下操作:

tables=["table1","table2",'table3",...]
tables.each do |t| 
  DB[t.to_sym].insert(...)
end

但是,您可能希望考虑到上面的答案是 Jeremy Evans,他是 Sequel gem 的创建者,如果他不建议将此作为解决方案,那么可能有充分的理由。

于 2020-11-13T20:08:23.393 回答