在我的rails应用程序中,我使用了carrierwave来处理图像。 Carrierwave创建不同版本的图像,网址可以像这样获得:picture.large.url
,picture.small.url
,picture.thumb.url
等。
我想创建一个可以接受字符串参数的方法,然后可以将其用于图像URL。像这样:
def profile_url (version)
picture.version.url
end
那么我可以写@user.profile_url('thumb')
,它应该给我拇指大小的网址。
我得到一个未定义的方法'版本'错误。这可能吗?
答案 0 :(得分:6)
通常你可以这样做:
def profile_url(version)
version = version.to_sym
case version
when :large, :small, :thumb
picture.send(version).url
end
end
此处to_sym
来电的原因是您可以拨打此profile_url('thumb')
或profile_url(:thumb)
,这两种情况都可以。
答案 1 :(得分:1)
根据CarrierWave url
的文档,您可以将版本作为参数传递:
当给出版本名称作为参数时,将返回该版本的URL [...]
my_uploader.url #=> /path/to/my/uploader.gif my_uploader.url(:thumb) #=> /path/to/my/thumb_uploader.gif
您的代码可以写成:
class User < ActiveRecord::Base
mount_uploader :picture, PictureUploader
def profile_url(version)
picture.url(version)
end
end
并通过以下方式致电:
@user.profile_url('thumb')
# or
@user.profile_url(:thumb)
您也可以直接调用该方法:
@user.picture.url('thumb')
# or
@user.picture.url(:thumb)