有没有办法在 Active Record 中调用 table 作为变量?

Is there way to call a table as a variable in Active Record?

标题有点乱,我解释一下。

我有 3 个模型 classes,分别称为 Table1、Table2 和 Table3。所有三个表都有 "total" 列。

这就是我希望能够做到的:

index = either 0, 1, or 2
tableNames = ["Table1", "Table2", "Table3"]
tableNames[index].total

^ 显然我不能那样做,因为 tableNames[index] returns 是一个字符串,而不是对实际 class 本身的引用。

这是我目前正在做的事情:

index = either 0, 1, or 2
if index == 0 then
    Table1.total
elsif index == 1 then
    Table2.total
elsif index == 2 then
    Table3.total
end

我想我想做的事情有点类似于ruby中的"send"方法,你可以使用变量作为方法名。

有没有办法做到这一点,还是我必须做 if elsif 检查?这使得代码更长更笨重,我想知道是否有更好的方法。谢谢!

如果您以字符串形式获取模型名称。你可以这样做

model_name = "Table1" #or "Table2", "Table3"
model = model_name.constantize 
model.total

你可以用 constantize 方法直接把任何字符串变成class。

注意 - 如果您打算进一步使用 rails,最好将它们称为模型而不是表格。