给定字符串格式的列名称(例如" hamburger_id"或" foo_bar_id"),是否有一种获取类(或类名)的标准方法。在这种情况下,Hamburger还是FooBar?
我能想到的唯一方法是:
column_name[0, column_name.length - 3].camelize.constantize
我可以假设(或规定)变量column_name始终包含带有" _id"的字符串。最后,相应的类总是存在。
如果某人发现它具有相关性或好奇心,我可以详细说明"为什么",但我并不想用这些细节弄乱这个问题。
答案 0 :(得分:2)
您可以执行以下操作(假设具有__注释模型的Post模型的传统Rails示例):
Model.reflect_on_all_associations.select{|a| a.foreign_key == 'column_name'}.first.class_name
这样做的好处是,如果您的类名和外键不对齐,它仍会提供正确的类名。例如,如果您的外键是owner_id
但关联的模型实际上名为User
,则会返回"User"
而不是"Owner"
。
这仍然感觉有点像黑客,但那是因为它不像Rails那样根据列名获取这些信息 - 通常你会直接与关联交互(使用reflect_on_association(:foos)
)。