有没有办法在激活记录中将表调用为变量?

时间:2015-05-30 23:44:12

标签: ruby-on-rails coding-style rails-activerecord

标题有点令人困惑,所以让我解释一下。

我有3个名为Table1,Table2和Table3的Model类。所有三个表都有“总”列。

这是我希望能够做到的事情

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

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

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

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检查?这使代码更长,更笨,我想知道是否有更好的方法。谢谢!

1 个答案:

答案 0 :(得分:2)

如果您将型号名称作为字符串。你可以这样做

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

您可以使用 constantize 方法将任何字符串直接转换为类。

注意 - 如果您打算进一步使用rails,理想情况下将它们称为Models而不是表。