所以我正在使用载波直接,我正处于需要更新上传器对象的“key”属性的位置。这是docs上的相关行:
上传到S3后,您需要使用与new_user_url对应的控制器操作中返回的密钥更新上传器对象:
@uploader.update_attribute :key, params[:key]
问题是我的@uploader对象没有update_attribute方法。实际上,当我查看@uploader对象上的所有方法时,我看到的方法如key()和key =(),但没有update_attribute。
知道发生了什么事吗?我是否错过了为使update_attribute方法可用而需要执行的一些设置步骤?
答案 0 :(得分:7)
我通过在模型上调用update_attribute而不是上传器来实现它。在下面剪切了@uploader,CarrierWave :: Uploader :: Base和@video的子类是模型。
def upload
@uploader = Video.new.asset
@uploader.success_action_redirect = videos_upload_successful_url
end
def upload_successful
@video = Video.new
@video.update_attribute :key, params[:key] # different than documentation!!
@video.save
end
这似乎与文档相反,在文档中记录了它们的尝试方式。
答案 1 :(得分:0)
我遇到了同样的问题,但我解决了添加新列的问题。
我认为您需要添加avatar_image_url
之外的其他列avatar
,而mount_uploader :avatar, AvatarUploader
用作class ProfilesController < ApplicationController
before_action :setup_context
def edit
@uploader = @profile.avatar
@uploader.success_action_status = '201'
end
def update
if @profile.update_attributes(profile_params)
redirect_to home_path
else
render :edit
end
end
private
def setup_context
@profile = current_user
end
def profile_params
params.require(:user).permit(:name, :avatar_image_url)
end
end
。
控制器是这样的:
avatar_image_url
发布以下参数时,可以保存Parameters: {"utf8"=>"✓", "user"=>{"avatar_image_url"=>"https://my-development.s3.amazonaws.com/uploads/220f5378-1e0f-4823-9527-3d1170089a49/foo.gif", "name"=>"Schneems"}}
。
<%= image_tag @user.avatar_image_url %>
您可以像这样推荐图片。
{{1}}
你也可以看一下。