2016-03-23 30 views
0

Rails 4.2.5 kullanıyorum. Modelimde, kullanıcımın, dosya adının tanımlandığı bir tabloya bağlanan bir "avatar_file_id" özniteliği var. “Avatar_files” tablosu alanları Raylarda, kontrol ünitesine açıkça bakmadan bir ilişkiyi arayabilir miyim?

id 
file 

kullanıcı giriş, benim sayfasında avatar resmini göstermek istiyorum, ama sorun nasıl bulmaktan yaşıyorum

sahiptir. Benim denetleyicisi, ben açmış kullanıcı (@current_user) bir başvuru var ve bu yüzden

   <%= image_tag "avatar_images/#{current_user.avatar_file_id}", alt: current_user.name %> 

ama açıkça, bu sadece dosya adı değil id, bir dosyayı arama dener var işler nasıl kurulur. Kontrolördeki görüntü dosyasını açık bir şekilde aramalı mıyım ve o değişkeni sayfaya eklemem mi gerekiyor yoksa sadece kullanıcı nesnesine verilen görüntü yolunu almanın daha net bir yolu var mı?

sayesinde - Dave

+0

Avatar görüntüsünü hangi alanda tutuyorsunuz? – Pavan

+0

Gerçek yola sahip avatar_file.file. Kullanıcı modelinde bu tabloya bağlanan bir avatar_file_id vardır. – Dave

+0

Denemek <% = image_tag current_user.avatar_file.file, alt: current_user.name%> ' – Pavan

cevap

0

bunu yapabilirsiniz

<%= image_tag "avatar_images/#{Avatar.find(current_user.avatar_file_id).file}", alt: current_user.name %> 

Ama güvenlik önlemleri çok bu şekilde yapmak atlamak (gibi bir şey yani kullanıcı bir avatar resmini yüklemedi ne olur?) ve eğer bu tür şeyleri kendi bakış açına koyursanız, gerçekten dağınık hale gelir.

Genelde, denetleyicinizdeki saf Ruby'den çok daha fazla hata ayıklama html/Ruby olduğundan daha az hata yapıyor olmanız gerekir; bu nedenle, yalnızca denetleyicinizdeki nesneyi yüklemek ve bir değişkende iletmek daha iyi olabilir.

+0

Senin noktasını görüyorum ama bu kod bölüm "./app/views/layouts/application.html.erb" adresimin birçoğu, birçok denetleyici yöntemiyle oluşturuluyor. Söylüyor musunuz, ben, kusursuz bir mantıkla gelmem ve daha sonra, yukarıdaki sayfayı gösterecek olan her yönteme koymam gerekiyor mu? – Dave

+0

Bunu yapmanın daha iyi bir yolu olabileceğini söylüyorum, ama kişisel olarak, sadece önce çalışmayı ve daha sonra yeniden hesaplamayı isterim. Son kullanıcı – SomeSchmo

+0

için herhangi bir fark yaratmayacak "bunu yapmak için daha iyi bir yol olabilir", ben de o kadar çok kelimeyle benim soruda söylediğim şey olduğunu biliyorum ("görüntü yolunu elde etmenin daha net bir yolu var"). Burada bir cevap olarak daha iyi bir yol arıyorum. – Dave