2017-09-11 1 views
0

J'ai le nom du champ d'image enregistré en tant que variable. Comment puis-je accéder à l'URL de l'image téléchargée dans le contrôleur sans utiliser la syntaxe à points? Je dois pouvoir y accéder dynamiquement.L'utilisation de Carrierwave permet d'accéder à l'URL de l'image dans le contrôleur sans la syntaxe du point

J'ai essayé de la façon suivante, mais il affiche le nom de fichier comme chaîne pas l'URL complète, cependant quand j'accède au même dans le fichier de vue, je peux accéder à un objet avec la propriété url;

@image_name = 'attachment'; 
@user = User.find(1) 
puts @user[@image_name] 

Selon la documentation de https://github.com/carrierwaveuploader/carrierwave nous sommes en mesure d'accéder à l'URL par les moyens suivants:

u.avatar.url # => '/url/to/file.png' 
u.avatar.current_path # => 'path/to/file.png' 
u.avatar_identifier # => 'file.png' 
+0

essayez d'utiliser 'u.avatar.url.to_path' –

Répondre

0

Vous pouvez appeler dynamiquement des méthodes sur un objet dans Ruby en utilisant Object#send ou #public_send:

@image_name = 'attachment'; 
@user = User.find(1) puts 
@user.send(@image_name).url 
0

J'ai fini par faire eval("@user.#{@image_name}") qui a fait à peu près ce qu'aurait fait une syntaxe à points mais avec une variable.

+0

Do not. Utilisez envoyer à la place. L'évaluation est lente et devrait être évitée si possible. – max

+0

Merci, ouais. 'eval' était mon dernier recours. :) –