标题有点令人困惑,所以让我解释一下。
我有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检查?这使代码更长,更笨,我想知道是否有更好的方法。谢谢!
答案 0 :(得分:2)
如果您将型号名称作为字符串。你可以这样做
model_name = "Table1" #or "Table2", "Table3" model = model_name.constantize model.total
您可以使用 constantize
方法将任何字符串直接转换为类。
注意 - 如果您打算进一步使用rails,理想情况下将它们称为Models而不是表。