16

我想知道 Rails 中给定模型的表标题对应的字段名称。

我正在使用查询模型显示标题。

query.columns.map{|q| q.caption}
=> ["Tracker", "Status", "Priority", "Subject", "Assignee", "Target version", "Due date", "% Done"]

列具有与标题对应的名称

query.columns.map{|q| q.name}
=> [:tracker, :status, :priority, :subject, :assigned_to, :fixed_version, :due_date, :done_ratio]

我的模型看起来像

问题.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”、“start_date”、“done_ratio”、“estimated_hours”、“parent_id”]

我想从上述信息中获取与标题对应的字段名称(数据库字段名称)。

模型中的样本关联

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

因此,对于上述关联,我想知道外键。

因为assigned_to我想要'assigned_to_id'

4

3 回答 3

24

reflections哈希包含这种信息:

Issue.reflections['assigned_to'].foreign_key

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

于 2012-09-07T11:41:45.497 回答
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

于 2015-04-18T19:17:59.273 回答
0

我在这里发布这个,以防这对其他人有帮助。我试图从proxy_association关联扩展中获取外键。

您可以reflection通过简单地使用proxy_associtation.reflection.

然后,使用上面@Frederick Cheung 的方法,你可以像这样得到foreign_key:

reflection = proxy_association.reflection
reflection.foreign_key

你也可以class_name用同样的方法得到:

reflection = proxy_association.reflection
reflection.class_name
于 2021-06-09T14:03:37.160 回答