मुझे वास्तव में रेल 3 शैली माइग्रेशन पसंद है, यानी एक change
विधि यह समझने के लिए पर्याप्त स्मार्ट है कि माइग्रेशन स्थापित किया गया है या वापस लुढ़का हुआ है, इसलिए मुझे up
और down
लिखने की आवश्यकता नहीं है। लेकिन मुझे स्थिति है कि माइग्रेशन वापस घुमाए जाने पर मुझे कुछ कोड छोड़ना होगा (counter_cache
कॉलम जो मैं जोड़ रहा हूं) अपडेट कर रहा हूं।रेल 3 शैली माइग्रेशन (डीफ़ चेंज) के साथ माइग्रेशन दिशा (ऊपर या नीचे) को कैसे पहचानें?
मैं http://guides.rubyonrails.org/migrations.html को देखा लेकिन खंड 5 के अंत में उदाहरण एक ही समस्या से ग्रस्त हैं:
class AddFuzzToProduct < ActiveRecord::Migration
class Product < ActiveRecord::Base
end
def change
add_column :products, :fuzz, :string
Product.reset_column_information
Product.all.each { |f| f.update_attributes! :fuzz => 'fuzzy' }
end
end
जब इस प्रवास वापस लुढ़का हुआ है, fuzz
क्षेत्र की अद्यतन अनावश्यक है। क्या इसे रोकने का कोई तरीका है?
मैंने Product.column_names
में देखने की कोशिश की लेकिन चूंकि रेल विपरीत दिशा में माइग्रेशन करने के लिए पर्याप्त स्मार्ट हैं, इसलिए कॉलम हटा दिए जाने से पहले अपडेट निष्पादित किया जाता है। साथ ही, जब change
विधि परिभाषित की गई है, तो up
या down
विधियों को अनदेखा किया जा रहा है। कोई अन्य विचार?
अप कर सकते हैं और रेल के सभी संस्करणों के लिए नीचे विधियों को बहिष्कृत नहीं किया गया है और उन्हें इस तरह की चीजों के लिए जरूरी है। यहां दिए गए सभी समाधान खराब हैं क्योंकि वे अनजान नहीं हैं, और खराब गंध है, और आपकी समस्या का समाधान करने का सबसे अच्छा तरीका सिर्फ सही और नीचे के तरीके लिखना है – edikgat