سؤال

لقد قمت بإنشاء جدول جديد بما في ذلك عمود "ملاحظة". الافتراضي هو varchar (255) أعتقد، لكنني أتمنى أن يكون هذا العمود منطقة نص مقابل حقل والسماح بمزيد من البيانات. أتصور أنني سأجعل هذا التغيير في ملف activerecord :: الترحيل ولكني فضولي عن التنسيق. هل يمكنني ببساطة تغيير varchar (255) إلى varchar (1000) على سبيل المثال؟ (إذا كان الأمر كذلك فما هو التنسيق؟

def self.up
    create_table :notes do |t|
      t.string :note :varchar(1000)
    end

هل هذا هو التنسيق الصحيح؟ علاوة على ذلك، كيف يمكنني الحصول على حقل الدخول إلى صفوف متعددة. آسف إذا كانت هذه أشياء سهلة، لكنني جديد على البرمجة و Ror. شكرا.

هل كانت مفيدة؟

المحلول

يمكنك ببساطة استخدام نوع "النص" بدلا من "السلسلة".

def self.up
  create_table :notes do |t|
    t.text :note
  end
end

يؤدي استخدام نوع "النص" إلى نتيجة عمود قاعدة البيانات من النص. عادة ما يقتصر Varchar على الحد الأقصى الطول 255 (في MySQL، تتميز RDBMSs الأخرى بحدود مماثلة).

إذا كنت تستخدم القضبان المساعدين نموذج، أ TextArea. سيتم إخراج هذا الحقل (لأنه من النوع "النص"). TextArea. هو عنصر النموذج الذي يقبل إدخال متعدد الخطوط.

تحرير: إذا كنت قد ترحيل بالفعل create_table، فيمكنك إنشاء ترحيل جديد لتغيير نوع العمود:

def self.up
  change_column :notes, :note, :text
end

نصائح أخرى

الشكل الصحيح سيكون

t.string :note, :limit => 1000

تأكد من استخدام إصدار من MySQL (أو أي قاعدة بيانات) التي تدعم Varchars أطول من 256 حرفا.

إذا كنت ترغب في استخدام كتلة نص كبيرة، فستكون كذلك

t.text :note

يرى http://api.rubyonrails.org/classes/activerecord/connectionAdapters/TableDefinition.html. للمزيد من المعلومات

يمكنك تغيير الطول مع خيار الحد كما ...

def self.up
  change_column :notes, :note, :string, :limit => 1000
end

منذ أن كان لدي الكثير من البيانات المخزنة بالفعل أنا استخدمت

self.up
  change_column :notes, :note, :text, :limit => nil
end

إذا تركت من: الحد من:> خيار NIL ثم سيغير نوع العمود من Varchar إلى Text، لكنه لا يزال لديه طول أقصى 255 حرفا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top