2012-09-07 26 views
13

我想知道与Rails中给定模型的表标题相对应的字段名称。从Rails中的关联中获取外键字段

我使用查询模型显示字幕。

query.columns.map {| q | q.caption}
=> [ “跟踪”, “状态”, “优先级”, “主题”, “受让人”, “目标版本”, “截止日期”, “%完成”]

列有相应字幕

query.columns.map {名称| q | q.name}
=> [:跟踪器,:状态,:优先,:主体,:assigned_to,:fixed_version,:DUE_DATE,:done_ratio]

我的模型看起来像

Issue.columns.map {| q | q.name}
=> [“id”,“tracker_id”,“project_id”,“subject”,“description”,“due_date”,“category_id”,“status_id”,“assigned_to_id”,“priority_id” fixed_version_id”, “AUTHOR_ID”, “created_on”, “updated_on”, “起始日期”, “done_ratio”, “estimated_hours”, “PARENT_ID”]

我想字段名(数据库字段名)对应于上述信息中的标题。在模型

belongs_to :assigned_to, :class_name => 'Principal', :foreign_key => 'assigned_to_id' 

样品协会因此,对于上述的关联,我想知道的外键。

assigned_to我想'assigned_to_id'

回答

15

reflections哈希持有这样的信息:

Issue.reflections['assigned_to'].foreign_key 

您还可以得到其他的信息,如类(.active_record)或关联的类型(.macro )。在rails 4.2之前,这个散列的键是符号而不是字符串。

+0

这个工作对我来说... Issue.reflections [:assigned_to]可供选项[:foreign_key] ..谢谢 –

1

为Rails 4.2的正确方法是:

Issue.reflections['assigned_to'].options[:foreign_key] 

注意,“assigned_to”是根据API的字符串:

返回反射的密钥和名称的哈希 AssociationReflection作为值。

http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html#method-i-reflections

+1

注:这将返回只附着在选项自定义外键的哈希传递给协会的帮手。所以它在外键自动设置的标准情况下不起作用。 BTW Frederick的解决方案仍然在Rails 4.2中工作 – MhdSyrwan

+1

的确如此!感谢您的注意!尽管如此,为了让Frederick的解决方案能够在Rails 4.2中工作,关联名称必须作为字符串而不是符号传递。 –