القضبان: لا يمكن إضافة: الدقة أو: خيارات النطاق مع تغيير change_column في الترحيل؟

StackOverflow https://stackoverflow.com/questions/2450494

سؤال

يبدو أن هذا قد طلب منه من قبل: القضبان الدقة العشرية والحجم

ولكن عند تشغيل 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 لا يعتمد على تصريحات نوع العمود وهو أكثر ديناميكية، والنظر في محتوى العمود بدلا من ذلك - كما كان يعثر هنا:

تعديل نوع العمود في 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top