使用Carrierwave访问控制器中的图像URL,而不是点语法

时间:2017-09-11 14:50:35

标签: ruby-on-rails ruby-on-rails-5 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'

2 个答案:

答案 0 :(得分:0)

您可以使用Object#send#public_send动态调用Ruby中任何对象的方法:

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

答案 1 :(得分:0)

我最终做了eval("@user.#{@image_name}"),这几乎完成了点语法所做的事情,但是有变量。