从id列名称到类名称

时间:2013-03-06 21:09:15

标签: ruby-on-rails-3

给定字符串格式的列名称(例如" hamburger_id"或" foo_bar_id"),是否有一种获取类(或类名)的标准方法。在这种情况下,Hamburger还是FooBar?

我能想到的唯一方法是:

column_name[0, column_name.length - 3].camelize.constantize

我可以假设(或规定)变量column_name始终包含带有" _id"的字符串。最后,相应的类总是存在。

如果某人发现它具有相关性或好奇心,我可以详细说明"为什么",但我并不想用这些细节弄乱这个问题。

1 个答案:

答案 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))。