2011-03-17 7 views
5

मैं एक तालिका बनाने के लिए एक रेल प्रवास लिख रहा हूँ:रेल timestamps: updated_on/created_on बनाम created_at/updated_at

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table| 
    table.timestamps 
    table.string :country_tld 
end 

यह निम्न तालिका में परिणाम: दुर्भाग्य से

CREATE TABLE `sites` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `created_at` datetime DEFAULT NULL, 
    `updated_at` datetime DEFAULT NULL, 
    `country_tld` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://foo:[email protected]/baz/sites' 

, मेरे विदेशी डेटा स्रोत अपने टाइमस्टैम्प के लिए पुराने स्कूल रेल updated_on और created_on कॉलम का उपयोग करता है। बेशक मैं इस के आसपास मिल सकता है: अगर कोई एक छोटी सी जिस तरह से अभी भी टाइम स्टांप का उपयोग करें और व्यवहार मैं चाहते हैं

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table| 
    table.datetime :created_on, :updated_on 
    table.string :country_tld 
end 

, मैं इसके बारे में जानने में खुशी होगी। और नहीं, मैं monkey-patching ActiveRecord::Timestamp पर ऐसा करने का एक छोटा सा तरीका नहीं मानता, क्योंकि यह सिर्फ एक प्रवास को प्रभावित करता है। ;)

उत्तर

8

मुझे पूरा यकीन नहीं है कि आपका प्रश्न यहां क्या है? ActiveRecord::Timestampcreated_on और updated_on कॉलम का उपयोग _at संस्करणों के समान होगा (लाइन 84 & 88 देखें)।

एक तरफ के रूप में, आपको एक लाइनर में डेटाटाइम उत्पन्न करने के लिए किसी सरणी के माध्यम से लूप की आवश्यकता नहीं है। बजाय इस का उपयोग करें:

table.datetime :created_on, :updated_on 
+0

धन्यवाद, मैं नहीं जानता था कि आप [ "सेक्सी वाक्य रचना"] (http://guides.rubyonrails.org/migrations.html#creating- साथ एक बार में एकाधिक स्तंभों बना सकते हैं मेज़)। –

+1

मेरा सवाल है: क्या मैं पुराने स्टाइल कॉलम बनाने के लिए '# टाइमस्टैम्प' सहायक का उपयोग कर सकता हूं? –

5

रेल स्रोत timestamps के लिए है:

def add_timestamps(table_name) 
    add_column table_name, :created_at, :datetime 
    add_column table_name, :updated_at, :datetime 
end 

तो तुम वहाँ स्तंभ नाम अनुकूलित करने के लिए कोई रास्ता नहीं है देख सकते हैं। ईमानदार होने के लिए, सबसे अच्छा तरीका यह है कि आप सुझाव देते हैं। मैं व्यक्तिगत रूप से की तरह सामान से बचने:

%w{created_on updated_on}.each {|col| table.datetime col.to_sym } 

और बस वास्तविक add_column आदेशों को लिखने, यह अधिक वर्बोज़ सा भी पढ़ने के लिए आसान है।

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