在ruby脚本中,我正在运行一个循环,在该循环中,我从表列表中动态获取表名,并且必须对其执行某种CRUD操作(主要是插入)。 我正在使用Sequel Orm并为各种表创建模型。 如何为每个表找到模型的名称,以便我可以执行插入?
tables=["table1","table2",'table3",...] tables.each do |t| #perform insertion on t #how to find the model name for table t? end
我可以使用哈希来存储每个表的模型名称,或者可以遵循将每个表的第一个字符转换为大写或类似的模式。
有更好的方法吗?
答案 0 :(得分:1)
在一般情况下,如果没有暴力搜索,你所要求的是不可能的,即使这样,它也是模棱两可的,原因很简单:以下是有效的:
class Foo < Sequel::Model(:table1); end
class Bar < Sequel::Model(:table1); end
基本上,每个模型都有一个相关的数据集(通常只是一个简单的SELECT * FROM表)。但是,其他模型可以使用相同或类似的数据集。因此从模型到表格很简单,但是表格到模型不是。
如果您已经创建了自己的模型,那么处理所需内容的最简单方法是使用哈希:
ModelMap = {}
ModelMap["table1"] = Model1
ModelMap["table2"] = Model2
然后你可以这样做:
ModelMap[t]
在每个块内部获取模型类。
答案 1 :(得分: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瑰宝的创建者,如果他不建议这样做,那么可能有充分的理由。