1

所以我正在使用载波直接,我需要更新上传器对象上的“关键”属性。这是文档上的相关行:

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

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

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

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

4

2 回答 2

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

这似乎与您尝试过的方式记录的文档相反。

于 2013-11-11T21:15:32.620 回答
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 %>

你也可以看看这个。

在 Rails 中直接到 S3 图像上传 | Heroku 开发中心

于 2015-03-28T12:26:47.897 回答