载波直接上没有update_attribute方法

时间:2013-07-12 17:39:53

标签: ruby-on-rails amazon-s3 paperclip carrierwave

所以我正在使用载波直接,我正处于需要更新上传器对象的“key”属性的位置。这是docs上的相关行:

上传到S3后,您需要使用与new_user_url对应的控制器操作中返回的密钥更新上传器对象:

@uploader.update_attribute :key, params[:key]

问题是我的@uploader对象没有update_attribute方法。实际上,当我查看@uploader对象上的所有方法时,我看到的方法如key()和key =(),但没有update_attribute。

知道发生了什么事吗?我是否错过了为使update_attribute方法可用而需要执行的一些设置步骤?

2 个答案:

答案 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}}

你也可以看一下。

Direct to S3 Image Uploads in Rails | Heroku Dev Center