2010-09-29 11 views
7

मैं रेल सीखने की प्रक्रिया में हूं। मैंने पाया है कि प्रमाणीकरण प्राप्त करने और जल्दी और निर्बाध रूप से चलने के साथ डेविस बहुत अच्छा है लेकिन मेरे पास एक सवाल है।पहली पीढ़ी के बाद तैयार मॉड्यूल संशोधित

डेविस जनरेटर के पहले भाग के बाद मॉड्यूल कैसे बदलूं (उदाहरण के लिए रेल जी उपयोगकर्ता को तैयार करें)? निम्न माइग्रेशन के साथ यह चूक:

def self.up 
    create_table(:users) do |t| 
    t.database_authenticatable :null => false 
    t.recoverable 
    t.rememberable 
    t.trackable 

    # t.confirmable 
    # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both 
    # t.token_authenticatable 

    t.timestamps 
    end 

    add_index :users, :email,    :unique => true 
    add_index :users, :reset_password_token, :unique => true 
    # add_index :users, :confirmation_token, :unique => true 
    # add_index :users, :unlock_token,   :unique => true 
end 

मैं इस माइग्रेशन चला गया है, मैं कैसे जोड़ सकता हूँ/बाद में उन मॉड्यूल में से कुछ को हटा दें? जैसे शायद मैं मौजूदा उपयोगकर्ता मॉडल में लॉक करने योग्य जोड़ना चाहता हूं। मैं समझता हूं कि मॉडल में बदलाव कैसे करें और devise.rb लेकिन मुझे यकीन नहीं है कि माइग्रेशन के साथ क्या करना है।

अगर उत्तर यहां पहले से ही है, माफी माँगती है, तो मैंने यहां कुछ घंटे और Google में ट्रेल किया है और कुछ भी नहीं मिला। शायद मैं गलत चीज़ की तलाश में हूं।

अग्रिम धन्यवाद!
जेसन
ps। मैं
रेल 3.0.0
वसीयत 1.1.3

उत्तर

0

बदलें लाइनों आप माइग्रेशन फ़ाइल में चाहते हैं का उपयोग कर रहा है, तो इन निर्देशों के अनुसार पलायन फिर से करना:

http://guides.rubyonrails.org/migrations.html

+0

हाय चक। पारितोषिक के लिए धन्यवाद। मैं इसे जाने दूंगा। यदि यह देवता के लिए इस्तेमाल किए जाने के बाद अन्य माइग्रेशन हैं तो क्या यह दृष्टिकोण स्वस्थ है? – Jason

+0

हां। रेलवे समय-समय पर चलने वाले क्रम में आवश्यक माइग्रेशन को लागू करने के लिए पर्याप्त स्मार्ट है और आंतरिक ट्रैकिंग जो पहले ही चल चुकी है। –

+0

धन्यवाद जोओस्ट। यकीन नहीं था। – Jason

1

जब तक क्योंकि आप केवल उन विकल्पों को हटा रहे हैं जहां उपयुक्त फ़ील्ड पहले से ही आपकी स्कीमा (जैसे पुष्टि करने योग्य) में जोड़े गए थे, आप हमेशा नए माइग्रेशन के बिना सीधे उपयोगकर्ता मॉडल को संपादित कर सकते हैं।

+0

धन्यवाद Joost। मुझे आइटम जोड़ने में भी रूचि है, उदा। t.lockable सिर्फ लॉक करने योग्य नाम नहीं है। – Jason

+0

मुझे लगता है कि इस तरह के कस्टम प्रकार आप रेल कमांड लाइन से पूरी तरह से नहीं कर सकते हैं, इसलिए आप 'रेल माइग्रेशन एडलॉकबल टूउज़र' उत्पन्न करने में सक्षम होंगे और उसके बाद फ़ाइल को डीबी/माइग्रेट फ़ोल्डर में मैन्युअल रूप से संपादित करें और टी जोड़ें .confirmable। फिर 'रेक डीबी: माइग्रेट' चलाएं और आपका क्षेत्र जोड़ा गया है। –

6

मैं एक ही प्रश्न का उत्तर ढूंढ रहा था, और सौभाग्य से, किसी ऐसे व्यक्ति के बगल में बैठना हुआ जो जानता था कि इसे कैसे किया जाए।

यहाँ उन मॉडल को अद्यतन करने के एक प्रवास स्क्रिप्ट के माध्यम से confirmable मॉड्यूल शामिल करने के लिए की उदाहरण है (साथ उत्पन्न आधारभूत स्क्रिप्ट फ़ाइल 'रेल उत्पन्न प्रवास add_confirmable_to_users'):

class AddConfirmableToUser < ActiveRecord::Migration 
    def self.up 
    change_table :users do |t| 
     t.confirmable 
    end 
    add_index :users, :confirmation_token, :unique => true 
    end 

    def self.down 
    remove_column :users, :confirmable 
    remove_index :users, :confirmation_token 
    end 
end 
+0

धन्यवाद प्रकाश। अगली बार जब मैं इसे करने की ज़रूरत है तो मैं इसे जाने दूंगा :) – Jason

2

मैं इस त्रुटि हो रही थी :

undefined local variable or method `confirmed_at' for #<User:0x000001041531c8> (NameError) 

confirmable को जोड़ने के लिए -

प्रवास जनरेट करें:

$ rails generate migration add_confirmable_to_users 

संपादित माइग्रेशन:

class AddConfirmableToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :confirmation_token, :string 
    add_column :users, :confirmed_at, :datetime 
    add_column :users, :confirmation_sent_at, :datetime 
    add_column :users, :unconfirmed_email, :string 
    end 
end 

http://guides.rubyonrails.org/migrations.html
https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

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