سؤال

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

 myapp/public/temp/myfile.doc

والشيء هو أنني أريد لإنشاء كائن DOCFILE من هذه الملفات في عمل وحدة تحكم.

وهنا هي تشذب الطبقة DOCFILE:

class DocFile < ActiveRecord::Base
  has_attached_file :docs,
    :path => "#{Constants::DOCFILES_PATH}:basename.:extension",
    :url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end

ومشبك لديه بعض الوثائق لطيفة إذا قمت بتحميل من نموذج، ولكن ليس في وضعي.

ولكن كيف يمكنني "محاكاة" حقيقة أنني تحميل الملف؟

وحتى الآن لقد حاول هذا:

temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file

ولكن انها لا تعمل.

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

وتحرير:

وفعلت ذلك:

temp_file_url = Constants::TEMPORARY_UPLOAD_PATH + "/" + params[:temp_file_upload][:doc]
temp_file = File.new(temp_file_url,  "w+")
@docfile = DocFile.new :docs => File.open(temp_file_url)

وانها لا تزال لا تعمل

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

المحلول

وكان علي أن أفعل هذا:

temp_file_name = #the filename
temp_file_path = Constants::TEMPORARY_UPLOAD_PATH + "/" + temp_file_name
temp_file = File.new(temp_file_path,  "r")

@docfile = DocFile.new :docs => temp_file

وعلى ما يبدو إذا لم يتم فتح الملف ك "قراءة" انها لن تنجح. أنه لا معنى للغاية بالنسبة لي ولكنه يعمل الآن!

نصائح أخرى

وأنا لست سلطة على القضبان، ولكن

@docfile = DocFile.new :docs => temp_file

ويجب أن يكون ذلك

@docfile = DocFile.new :docs => temp_file_url  

ويجب أن تمر Paperclip كائن File:

temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)

وأعتقد أنك سوف تحتاج إلى معالجة هذا مع الهجرة وعن الملفات الموجودة لديك، ستحتاج لملء الأعمدة التي مشبك يضيف إلى النموذج الخاص بك (xxx_file_name، xxx_content_type, xxx_file_size). أنت لم تذكر إذا تم تعيين Constants::DOCFILES_PATH إلى الدليل وثيقة إرث، ولكن حتى مع ذلك أعتقد أنك سوف تضطر إلى الرمزي لهذه الملفات إلى بنية الدليل الذي يتوقع مشبك ورق.

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