有没有办法在 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,最好将它们称为模型而不是表格。
标题有点乱,我解释一下。
我有 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,最好将它们称为模型而不是表格。