2017-09-11 24 views
0

我将图像字段名称存储为变量。如何在不使用点语法的情况下访问控制器中上传的图像url?我需要能够动态访问它。使用Carrierwave访问控制器中的图像URL,但不使用点语法

我试过下面的方法,但是打印出的文件名不是字符串,而是完整的URL,但是当我在视图文件中访问相同的文件时,我能够访问一个属性为url的对象;

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

按照文档从https://github.com/carrierwaveuploader/carrierwave我们可以通过下面的方法来访问的网址:

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

尝试使用'u.avatar.url.to_path' –

回答

0

可以动态调用在Ruby中的任何对象的方法,通过使用Object#send#public_send

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

我最终做了eval("@user.#{@image_name}"),它几乎做了点语法会做的事情,但用变量。

+0

不要。改用send。评估缓慢,应尽可能避免。 – max

+0

谢谢,是的。 'eval'是我的最后一招。 :) –

相关问题