القضبان: حفظ محتويات الحقل الثنائي إلى ملف
-
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