Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否有方法将CarrierWave中的文件重命名/覆盖为用户的用户名?_Ruby On Rails_Ruby On Rails 4_Carrierwave - Fatal编程技术网

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