2012-03-02 13 views
6

मैं कई मौजूदा डेटाबेस के आसपास एक रेल ऐप बना रहा हूं, मौजूदा डेटाबेस में उपयोग किए गए कॉलम नाम रेल एसोसिएशन सम्मेलनों के साथ बिल्कुल भी काम नहीं करते हैं। वहाँ एक मॉडल रास्ता के लिए इसी तरह के स्तंभ नाम उपनाम स्थापित करने के लिए एक रास्ता है आप कर सकते हैंरेल मॉडल मॉडल में मैन्युअल रूप से कॉलम नाम सेट करें

class User < Activerecord::Base 
self.set_table_name "users" 
end 

जब मौजूदा डाटाबेस कॉलम सामान्य रेल संघ नामकरण परंपराओं साथ काम नहीं करेंगे मैं स्तंभ नाम उपनाम सेट सकते हैं?

उत्तर

13

अपने मॉडल में, केवल गुणों (कॉलम) के लिए उपनाम सेट करें। उदाहरण के लिए:

class User < Activerecord::Base 
    alias_attribute :new_column_name, :real_column_name 
end 
+0

बिल्कुल मुझे जो चाहिए वह आपको धन्यवाद देता है। – holaSenor

+0

मुझे इस ब्लॉग से संबंधित कुछ और पॉइंटर्स के साथ यह ब्लॉग भी मिला। Http://nasir.wordpress.com/2007/10/24/not-following-rails-table-and-field-conventions/ – holaSenor

+1

नोट गतिशील खोजकर्ता हालांकि काम नहीं करते हैं। एक त्वरित परीक्षण: 'alias_attribute: परीक्षण,: username' ' User.find_by_username ('एबीसी') id' '=> 32' ' User.find_by_test ('एबीसी') id' ।। 'NoMethodError: # <कक्षा: 0x00000106f3e4c0>' – Zheileman

2

आप डेटाबेस स्तंभ (यानी केवल अपने रेल एप्लिकेशन यह संदर्भित कर रहा है) को संशोधित करने के लिए आप एक प्रवास rename_column पद्धति का उपयोग करके लिख सकता है सकते हैं, तो। क्योंकि आप रेल 3 का उपयोग कर रहे आप बस निम्न आदेश

~: rails g migration RenameColumnNameToNewColumn columnName:columnType

का उपयोग जाहिर है क्या आप के लिए सबसे अच्छा काम करता करने के लिए सामान्य नामकरण बदल सकते हैं। यह है कि इस तरह दिखता है आप के लिए एक प्रवास बनाना चाहिए, और अगर ऐसा नहीं होता, संशोधित इसके नीचे

class ChangeOldColumnToNewColumn < ActiveRecord::Migration 
     def up 
      rename_column :tableName, :oldColumn, :newColumn 
     end 

     def down 
      rename_column :tableName, :newColumn, :oldColumn 
     end 
end 

कोड के समान दिखता है करने के लिए आप कर रहे हैं नहीं में स्तंभ नाम बदलने में सक्षम वास्तविक तालिका आप अपने मॉडल में इसी तरह की एक रेखा डाल सकते हैं जो आपको प्राप्त करने की कोशिश कर रहे हैं।

alias_attribute :newColumnName, :existingColumnName 

यदि कॉलम नाम उलझन में है तो आपको मौजूदा कोटमनाम को डबल कोट्स के भीतर रखने की आवश्यकता हो सकती है।

+0

मैं इसे आजमाने की कोशिश कर रहा हूं, लेकिन Zheilman के पास एक बिंदु है जो काम नहीं करेगा, जो भ्रमित हो सकता है। मैं सिर्फ एक नया रेल डेटाबेस में आवश्यक डेटा ईटीएल कर सकता हूं और कनेक्ट करने के लिए establ_connection का उपयोग कर सकता हूं। – holaSenor

+0

यह एक दिलचस्प बात है कि वह लाया, मुझे यह सुनना अच्छा लगेगा कि यह आपके लिए कैसे समाप्त होता है। – coderates

+1

यदि आप उन कॉलम का नाम बदल सकते हैं, तो यह निश्चित रूप से जाने का तरीका है, क्योंकि रेल सम्मेलनों से अच्छा नहीं खेलेंगे, और आप लंबे समय तक बहुत सी चीजों को "चाल" करने के लिए समाप्त हो जाएंगे। यह सब निर्भर करता है कि आपके पास डेटाबेस स्कीमा पर कितना नियंत्रण है, और इसमें कितने "गलत कॉलम" हैं (शायद केवल 1 या 2 के लिए आप मुश्किल तरीके से जा सकते हैं)। – Zheileman

संबंधित मुद्दे