2012-09-07 18 views
13

में एसोसिएशन से विदेशी कुंजी फ़ील्ड प्राप्त करें मैं रेल में किसी दिए गए मॉडल के लिए तालिका कैप्शन से संबंधित फ़ील्ड नाम जानना चाहता हूं।रेल

मैं एक क्वेरी मॉडल का उपयोग कर कैप्शन प्रदर्शित कर रहा हूं।

query.columns.map {| q | q.caption}
=> [ "ट्रैकर", "स्थिति", "प्राथमिकता", "विषय", "अनुदिष्ट", "लक्ष्य संस्करण", "नियत दिनांक", "% पूर्ण"]

क्ष |

कॉलम नाम कैप्शन

query.columns.map {के लिए इसी है | q.name}
=> [: ट्रैकर,: स्थिति,: प्राथमिकता,: विषय,: assigned_to,: fixed_version,: DUE_DATE,: done_ratio]

मेरे मॉडल

तरह लग रहा है

Issue.columns.map {| q | q.name}
=> ["आईडी", "ट्रैकर_आईडी", "प्रोजेक्ट_आईडी", "विषय", "विवरण", "due_date", "category_id", "status_id", "assign_to_id", "primary_id", " fixed_version_id "," author_id "," created_on "," updated_on "," प्रारंभ_तिथि "," done_ratio "," estimated_hours "," PARENT_ID "]

मैं फ़ील्ड नाम प्राप्त करना चाहते हैं (db फ़ील्ड नाम) उपरोक्त जानकारी से एक कैप्शन के अनुरूप। मॉडल

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)। रेल 4.2 से पहले, इस हैश की चाबियाँ प्रतीक हैं और स्ट्रिंग नहीं हैं।

+0

मेरे लिए काम किया ... Issue.reflections [: assigned_to] .options [: foreign_key] .. धन्यवाद –

1

रेल 4.2 के लिए सही तरीका है:

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

ध्यान दें कि "assigned_to" एपीआई के अनुसार एक स्ट्रिंग है:

कुंजी और एक के रूप में प्रतिबिंब के नाम का एक हैश रिटर्न मूल्य के रूप में एसोसिएशन रिफ्लेक्शन।

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

इस
+1

नोट: यह केवल कस्टम विदेशी विकल्पों से जुड़ी चाबियाँ वापस आ जाएगी पारित कर दिया हैश एसोसिएशन सहायक के लिए। तो यह मानक मामलों में काम नहीं करेगा जहां विदेशी कुंजी स्वचालित रूप से सेट हो जाती है। बीटीडब्ल्यू फ्रेडरिक का समाधान अभी भी रेल 4.2 – MhdSyrwan

+1

में काम करता है! ध्यान देने के लिए धन्यवाद! हालांकि, फ्रेडरिक के समाधान को रेल 4.2 में काम करने के लिए, एसोसिएशन नाम को प्रतीक के बजाय स्ट्रिंग के रूप में पारित किया जाना चाहिए। –