在Rails Active Record上,如何获取为给定的_id属性生成的方法名称?

时间:2014-05-20 11:34:43

标签: ruby-on-rails ruby activerecord

例如,如果我的Book实体中有一个字段author_id,并且我添加了belongs_to :author,则创建方法author以访问此id引用的对象。 我还可以使用以下行来更具体一些:

belongs_to :author, :primary_key => 'p_code', :foreign_key => 'writer_code'

它仍然创建了author方法。我需要的是,拥有writer_code字段名称,我需要获取生成的author方法名称,或者至少提供实体名称。我确定Rails应该将所有这些关系存储在某个表的某个表中,我只需要访问它并找到它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

ActiveRecord动态确定大多数信息;它不会在DB中存储内容。

您可以使用ActiveRecord::Reflection

检查大多数信息

例如,您可以尝试:

Book.reflect_on_association(:author)

这将返回ActiveRecord::Reflection::AssociationReflection的实例,该实例封装此关联的所有AR信息存储信息,包括@options哈希,其中包含:foreign_key:class_name等密钥(如果已提供自定义值。)

如果您不知道关联的名称,则可以反映与reflect_on_all_associations方法的所有关联。从那里它应该是一个直接的集合和散列遍历:迭代它们并检查你已经知道的foreign_id