使用 Carrierwave 访问控制器中的图像 url,无需点语法
Using Carrierwave access the image url in the controller wihtout the dot syntax
我将图像字段名称存储为变量。如何在不使用点语法的情况下访问控制器中上传的图像 url?我需要能够动态访问它。
我尝试了以下方法,但它打印出文件名作为字符串而不是完整的 URL,但是当我在视图文件中访问相同内容时,我能够使用 属性 url
;
@image_name = 'attachment';
@user = User.find(1)
puts @user[@image_name]
根据 https://github.com/carrierwaveuploader/carrierwave 的文档,我们可以通过以下方式访问 URL:
u.avatar.url # => '/url/to/file.png'
u.avatar.current_path # => 'path/to/file.png'
u.avatar_identifier # => 'file.png'
您可以使用 Object#send
或 #public_send
:
在 Ruby 中的任何对象上动态调用方法
@image_name = 'attachment';
@user = User.find(1) puts
@user.send(@image_name).url
我最终做了 eval("@user.#{@image_name}")
,它几乎完成了点语法所能完成的工作,但使用了变量。
我将图像字段名称存储为变量。如何在不使用点语法的情况下访问控制器中上传的图像 url?我需要能够动态访问它。
我尝试了以下方法,但它打印出文件名作为字符串而不是完整的 URL,但是当我在视图文件中访问相同内容时,我能够使用 属性 url
;
@image_name = 'attachment';
@user = User.find(1)
puts @user[@image_name]
根据 https://github.com/carrierwaveuploader/carrierwave 的文档,我们可以通过以下方式访问 URL:
u.avatar.url # => '/url/to/file.png'
u.avatar.current_path # => 'path/to/file.png'
u.avatar_identifier # => 'file.png'
您可以使用 Object#send
或 #public_send
:
@image_name = 'attachment';
@user = User.find(1) puts
@user.send(@image_name).url
我最终做了 eval("@user.#{@image_name}")
,它几乎完成了点语法所能完成的工作,但使用了变量。