Ruby on rails 在Rails活动记录中,如何获取为给定的_id属性生成的方法名?

Ruby on rails 在Rails活动记录中,如何获取为给定的_id属性生成的方法名?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,例如,如果我在我的图书实体中有一个字段author\u id,并且我添加了归属于:author,那么将创建方法author,以访问此id所引用的对象。 我还可以使用以下行来更具体一些: belongs_to :author, :primary_key => 'p_code', :foreign_key => 'writer_code' 它仍然创建了author方法。我需要的是,拥有writer\u code字段名,我需要获得生成的author方法名,或者至少是提供的实体名。我确信R

例如,如果我在我的图书实体中有一个字段
author\u id
,并且我添加了
归属于:author
,那么将创建方法
author
,以访问此id所引用的对象。 我还可以使用以下行来更具体一些:

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

它仍然创建了author方法。我需要的是,拥有
writer\u code
字段名,我需要获得生成的
author
方法名,或者至少是提供的实体名。我确信Rails应该将所有这些关系存储在某个表中,我只需要访问它并找到它。任何想法?

ActiveRecord
动态确定大多数信息;它不在数据库中存储内容

您可以使用

例如,您可以尝试:

Book.reflect_on_association(:author)
这将返回一个
ActiveRecord::Reflection::AssociationReflection
实例,该实例封装了此关联的所有AR存储信息,包括带有键的
@options
散列,如
:foreign\u key
:class\u name
(如果提供了自定义值)


如果不知道关联的名称,可以使用该方法反映所有关联。从这里开始,应该是一个直接的集合和散列遍历:遍历它们并检查您已经知道的
外来id

好的,但是如果我只有te外来密钥呢?我不知道关系名(:author)。。。有没有一种方法可以迭代所有关联或类似的内容?
reflect\u on\u所有关联
不设置
:外键
key in
@options
,除非它是在模型关联宏中表示的(例如,除非您手动将
外键
参数传递给
所属的
)。