Ruby on rails 是否有方法将CarrierWave中的文件重命名/覆盖为用户的用户名?
我为每个用户都有一个头像,用户名总是唯一的。这就是为什么我想重新命名图片,以反映上传图片的人的用户名,以便于抓取和解决任何与图片名称冲突的问题 但是,我在访问我的Ruby on rails 是否有方法将CarrierWave中的文件重命名/覆盖为用户的用户名?,ruby-on-rails,ruby-on-rails-4,carrierwave,Ruby On Rails,Ruby On Rails 4,Carrierwave,我为每个用户都有一个头像,用户名总是唯一的。这就是为什么我想重新命名图片,以反映上传图片的人的用户名,以便于抓取和解决任何与图片名称冲突的问题 但是,我在访问我的app/uploader/avatar\u uploader.rb文件中的人的用户名时遇到问题。我有一些类似的想法 def filename if original_filename @user = User.find_by_username(params[:id]) "#{@user.username}
app/uploader/avatar\u uploader.rb
文件中的人的用户名时遇到问题。我有一些类似的想法
def filename
if original_filename
@user = User.find_by_username(params[:id])
"#{@user.username}.#{file.extension}"
end
end
我在这里得到的错误是params不存在,没有它,方法username就不存在
将其重写为诸如
“foo.jpg”
之类的内容确实有效,并且文件正在成功上载,我只是想知道如何访问上载文件的用户的用户名。参数[:id]
是零
,除非您将其与请求一起传递或嵌入到路由中。但我不推荐这种方式,因为用户可以将其更改为传递任何id
你应该找到从会话上传文件的用户,例如使用Desive
@user=当前用户
或者如果您在会话中存储了用户id
:
@user=user.find(会话[:user\u id])
编辑
上面的代码只在控制器中工作,也就是说,您需要在控制器中获取用户并传递到uploader方法:
def filename(user)
好的,这很有意义,但是我在哪里传递用户?filename(user)
是否应该获取当前用户?我明白了,您的问题特定于CarrierWave。也许这个链接对你有帮助:(在上传者的模型和用户之间建立一个关系,他们使用model.user
)