0

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

我能想到的唯一方法是:

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

我可以假设(或规定)变量 column_name 始终包含一个以“_id”结尾的字符串,并且始终存在相应的类。

如果有人觉得它相关或好奇,我可以详细说明“为什么”,但我不想用这些细节来混淆这个问题。

4

1 回答 1

2

您可以执行以下操作(假设 Post 模型的传统 Rails 示例包含多个 Comment 模型):

Model.reflect_on_all_associations.select{|a| a.foreign_key == 'column_name'}.first.class_name

这样做的好处是,如果您的类名和外键不对齐,它仍然会给出正确的类名。例如,如果您的外键是owner_id但关联的模型实际上是命名的User,这将返回"User"而不是"Owner"

这仍然感觉有点像 hack,但那是因为基于列名获取此信息并不是很像 Rails - 通常您会直接与关联进行交互(使用reflect_on_association(:foos))。

于 2013-03-06T21:24:50.667 回答