2012-09-07 50 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中工作,關聯名稱必須作爲字符串而不是符號傳遞。 –