القضبان: حفظ محتويات الحقل الثنائي إلى ملف

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

  •  06-09-2019
  •  | 
  •  

سؤال

لدي نموذج مع حقل ثنائي يحتوي على ملف. أرغب في حفظ هذا الملف على القرص كجزء من عملية أحتاج إلى القيام به. لسبب ما، لا يمكنني العثور على أي شيء حول كيفية القيام بذلك.

يحتوي النموذج على حقل اسم الملف وحقل file_contents. أود أن أفعل شيئا مثل هذا:

model = SomeModel.find :first
model.file_contents.save_to_file(model.filename)

سيكون موضع تقدير أي مساعدة!

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

المحلول

لا أعرف لماذا تريد الاتصال ب # Save_to_File على محتويات الملف بدلا من النموذج. منذ أن حددت file_contents. كسب سمة أعتقد أنك تريد حفظها إلى DB و احفظه على القرص. إذا كان الأمر كذلك، فيمكنك ببساطة إضافة طريقة مثل هذا النموذج الخاص بك:

 class YourModel < ActiveRecord::Base
   # ... your stuff ...
   def save_to_file
     File.open(filename, "w") do |f|
       f.write(file_contents)
     end
   end
 end

ثم كنت ببساطة تفعل:

obj = YourModel.find(:first)
obj.save_to_file

نصائح أخرى

في activerecord، :binary اكتب الذي تستخدمه لتحديد نوع العمود الخاص بك في ترحيلك هو الذهاب إلى الخريطة إلى blob اكتب في قاعدة البيانات. لذلك لن يسمح لك بحفظ ملف.

أعتقد أنك ستحتاج إلى تحديد فئة نموذجية ليست فئة فرعية من ActiveRecord::Base وتحديد مخصص save_to_file طريقة لهذا الفصل باستخدام دعم الملف I / O في Ruby ( IO الطبقة والفئة الفرعية، File).

class SomeModel
 attr_accessor :file
 attr_accessor :contents

 def initialize
  @file = File.new("file.xyz", "w")
 end

 def save_and_close
  @file << contents
  @file.close
 end
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top