ठीक है, सवाल पुराना है और ओपी ने संस्करण निर्दिष्ट नहीं किए हैं।
class SomeMigration < ActiveRecord::Migration
# emulate a primary_key column without auto-increment
# the solution here is to use a non-null integer id column with a unique index
# this is semantically different from PRIMARY KEY in mysql but not
# _too_ functionally different, the only difference is that mysql enforces
# no-more-than-one-primary-key but allows >1 unique index
def up
create_table :foobars, :id => false do |t|
t.integer :id, :null => false
t.string :name
end
add_index :foobars, :id, :unique => true
end
end
मुझे आशा है कि समय बिताने इस पर नज़र रखने से वहाँ किसी की बचत होती है, या बुरा:
mysql2 0.3.11
rails 3.2.13
mysql 5.5
मैं इसके लिए जा रहा समाप्त हो गया: यहां दिए गए उत्तर से कोई भी इन संस्करणों के साथ मेरे लिए काम किया ... यह जांचने के बिना उत्तर का उपयोग कर रहा है कि यह डीबी के साथ क्या करता है ... क्योंकि या तो सॉजनर या जिम के उत्तरों (निर्भरताओं के मेरे संस्करणों के साथ) का उपयोग यह है कि माइग्रेशन ठीक चलता है लेकिन नल आईडी की अनुमति है, और डुप्लिकेट आईडी अनुमति हैं। मैंने शेप के जवाब की कोशिश नहीं की क्योंकि मुझे डीबी/स्कीमा.आरबी असंगत होने का विचार पसंद नहीं है (उस कमी के बारे में स्पष्ट होने के लिए शेप को +1, कभी-कभी यह एक बुरी चीज होगी)
मैं हूं यकीन नहीं इस के महत्व है, लेकिन इस समाधान के साथ, mysql describe
यह एक प्राथमिक कुंजी के रूप में, एक ही डिफ़ॉल्ट के साथ एक एआर तालिका के रूप में दिखाता है:
एआर डिफ़ॉल्ट के साथ तालिका: आईडी ... में के रूप में आईडी
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
मेरे समाधान के साथ तालिका:
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
जो कि दिलचस्प है क्योंकि मेरे समाधान के साथ माइग्रेशन द्वारा उत्पन्न एसक्यूएल में "प्राथमिक कुंजी" (बेशक) शामिल नहीं है ... लेकिन एआर डिफ़ॉल्ट के साथ: आईडी यह करता है ... तो ऐसा लगता है कि कम से कम mysql describe
व्यवहार करता है एक गैर-शून्य अद्वितीय-अनुक्रमित एक प्राथमिक कुंजी
HTH किसी
यह मेरे लिए mysql2 एडाप्टर और रेल 3.2 के साथ काम नहीं करता है।13 –