2013-08-14 8 views
16

तो, मैं इस PHP साइट को मौजूदा डेटाबेस के साथ माइग्रेट करने पर काम कर रहा हूं जिसे मैं रेल में नहीं बदल सकता। type नामक कॉलम के साथ एक तालिका है: Quotes। जब भी मैं कोशिश करते हैं और इस का एक मॉडल बना सकते हैं और प्रकार सेट, यह मेरे निम्न त्रुटि बताता है:रेल: अमान्य सिंगल-टेबल विरासत प्रकार त्रुटि

ActiveRecord::SubclassNotFound (Invalid single-table inheritance type: HOME is not a subclass of Quotes)

मुझे समझ नहीं आता क्यों वह अपने इनहेरीट सोचता है, क्योंकि यह माना जाता नहीं है। मेरी निर्माण विधि इस तरह दिखती है:

quote = Quotes.create(
    agent_id: agent.id, 
    client_id: client.id, 
    type: 'HOME', 
    status: 0, 
    date_created: DateTime.now 
) 

यदि मैं इस प्रकार की टिप्पणी करता हूं, तो सब ठीक काम करता है। लेकिन टाइप के साथ त्रुटियों के साथ।

उत्तर

49

मैंने मॉडल rescue_column को nil में सेट करके इसे हल किया। सक्रिय रिकॉर्ड मॉडल विशेषता :type के माध्यम से एक टेबल से विरासत कर सकते हैं, हटाता है कि विशेषता आप एक डेटाबेस स्तंभ नामित type

class Quote < ActiveRecord::Base 
    self.inheritance_column = nil 
end 
+0

धन्यवाद, यह मेरे सही दिशा में इशारा किया। मेरे पास "टाइप" नामक कॉलम था और यह त्रुटि उत्पन्न कर रहा था। – mack

3

मैं विशेष रूप से आरंभिक में कोड में गहरी संभावित gotchas होने से नफरत है करने के लिए अनुमति नहीं के बराबर करने के लिए inheritance_column की स्थापना मॉडल उत्पन्न करने जैसी प्रक्रियाएं। आरक्षित शब्द को किसी और चीज़ में बदलने के लिए बेहतर है और जरूरत पड़ने पर बाद में विरासत कॉलम का लाभ उठाने के लिए खुद को मुक्त करें। एक क्लीनर समाधान यहां सूचीबद्ध है ->rename a database column name using migration

यह पढ़ता है;

  1. निष्पादित $> रेल प्रवास ChangeColumnName जहां, ChangeColumnName हमारे माइग्रेशन का नाम है उत्पन्न करते हैं। यह कोई नाम हो सकता है।
  2. अब, डाटाबेस में उत्पन्न प्रवास फ़ाइल को संपादित/विस्थापित/_change_column_name.rb

    class ChangeColumnName < ActiveRecord::Migration 
    def change 
    rename_column :table_name, :old_column, :new_column 
    end 
    end 
    
  3. $> रेक db: विस्थापित

आप नियंत्रक और फ़ाइलें देखें उदा संपादित करने के लिए होगा अगर मॉडल का नाम उत्पाद है तो आप की संभावना इन फ़ाइलों को संपादित होगा

  1. /app/views/products/_form.html.erb
  2. /app/views/products/show.html.erb
  3. /एप्लिकेशन/नियंत्रक/products_controller.erb
  4. /app/views/products/index.html.erb
+0

जबकि मैं मानता हूं कि यह सबसे अच्छा अभ्यास है, मेरी समस्या एक विरासत डेटाबेस का उपयोग करके शामिल है जिसमें मेरे पास चीजों को बदलने की क्षमता नहीं थी। –

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