سؤال

أنا مناولة مرفقات الملفات في تطبيق القضبان الخاص بي مع Attactment_fu، والتي توفر public_filename طريقة لاسترداد عنوان URL الخاص بالملف. أنا أستخدمه على نموذج يسمى الغلاف، لذلك إذا أردت استدعاء عنوان URL لصورة الغلاف المحملة، في طريقة عرض سأفعل:

<%= image_tag(@cover.public_filename) %>

يعمل هذا على ما يرام عندما يكون لدى المستخدم المرفق المناسب، ولكن في طلبي ليس شرطا للمستخدم لتحميل مرفق.

لذلك، دعوة @cover.public_filename سوف رمي TypeEror: لا يمكن تحويل nil إلى سلسلة للسبب الواضح أن الملف لا شيء.

ومع ذلك، أواجه مشكلة في إضافة المنطق إلى هذه المشكلة بشكل فعال لأن الكائن هو NIL، وكل محاولاتي بعمل أشياء مثل unless @cover.public_filename.nil? أو if @cover.public_filename == nil كانت غير مثمرة وتسبب نفس الخطأ من النوع.

ماذا ينقصني؟

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

المحلول

لم أعمل مع مرفق_fu، ولكن كما أرى public_filename هو الطريقة التي تعتمد على بعض الحقول التي لا تحتوي على مرفق. هنا قرأت أن المرفق_ يجب أن يكون له مرفق دائما - وربما هذا هو السبب وراء عدم العمل من أجلك. المؤلف يقترح أيضا باستخدام دبوس ورق توصيل في. نلقي نظرة على ذلك!

نصائح أخرى

<%= image_tag(@cover.public_filename) unless @cover.nil? %>

آسف، لا يمكن التعليق، حتى هنا تحديث في حين أن:

@cover.public_filename? لن تعمل هنا بسبب @cover هو nil كائن وبالتالي لا يوجد لديه public_filename? طريقة.

nil.respond_to?('public_filename?') #=> false

محدث:

أصنعها:

<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>

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