القضبان: لا يمكن إضافة: الدقة أو: خيارات النطاق مع تغيير change_column في الترحيل؟
-
20-09-2019 - |
سؤال
يبدو أن هذا قد طلب منه من قبل: القضبان الدقة العشرية والحجم
ولكن عند تشغيل change_column
الترحيل ل :precision
أو :scale
أنها لا تؤثر في الواقع على المخطط أو قاعدة البيانات، ولكن db:migrate
يعمل دون أخطاء.
يبدو أن ملف الترحيل الخاص بي مثل هذا:
class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
def self.up
change_column :tags, :payback_period, :decimal, { :scale => 3, :precision => 10 }
end
def self.down
change_column :tags, :payback_period, :decimal
end
end
لكن مخططي (والبيانات) لا تزال على النحو التالي:
t.decimal "payback_period"
أي شخص آخر لديه هذه المشكلة؟
شكرًا،
جوش
المحلول 2
لا يعمل من أجل sqlite3
لهذا التطبيق الاختبار البسيط الذي أقوم بتشغيله لدي إعداد SQLite3. فيما يبدو، SQLite3 لا يعتمد على تصريحات نوع العمود وهو أكثر ديناميكية، والنظر في محتوى العمود بدلا من ذلك - كما كان يعثر هنا:
لم أختبرها لكنني متأكد من أن هذا هو السبب في عدم تغيير المخطط، لأن change_column
لا يترجم إلى أي شيء في SQLite3.
شكرا على الردود الرجال.
نصائح أخرى
كان لديه مشكلة ذات صلة (ولكن ليست نفسية). كنت فقط تغيير الحجم، لذلك عند تغيير المقياس الذي تحتاجه:
change_column :something, :weight, :decimal, :precision => 10, :scale => 2
حذف: عشري (الذي كان بالفعل) و: الدقة (التي كانت بالفعل 10) ستتسبب في فشل الهجرة.
حذف وتجديد db\schema.rb
ملف.
rake db:schema:dump
اختراق، ولكن يجب أن تحصل على المكان الذي تحتاج إليه للذهاب:
class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
def self.up
execute "ALTER TABLE tags CHANGE payback_period DECIMAL(3,10)"
end
def self.down
change_column :tags, :payback_period, :decimal
end
end