Загрузка файлов из удаленного местоположения и удаление не работает в carrierwave - PullRequest
2 голосов
/ 16 июня 2011

У меня есть вложенное изображение ресурса для модели пользователя.если я пытаюсь загрузить изображение с «remote_file_url», оно загружает изображения в каталог tmp carrierwave, но не перемещает их в реальный каталог.это «должно» быть проблемой проверки.но это не так.он отлично работает в консоли:

p = Picture.find(360)
p.remote_file_url = "http://example.com/somepic.jpg"
p.save!

my Параметры для запроса обновления пользователя с картинкой:

 "user"=>{"pictures_attributes"=>{"0"=>{"remote_file_url"=>"http://example.com/somepic.jpg", "id"=>"359"}

, если я загружаю без remote_file_url (только входной файлполе), это работает:

 "user"=>{"pictures_attributes"=>{"0"=> { "file"=>#<ActionDispatch::Http>, "remote_file_url"=>"",  "id"=>"359"}

та же проблема возникает, когда я использую функцию "remove_file".прекрасно работает в консоли, но не работает с обновлением вида / контроллера.

==================

Обновление

контроллер:

  def update
    @user = current_user
    if @user.update_attributes!(params[:user])
      respond_to do |format|
        format.js { render :json => @user.to_json(:methods => [:pictures]) }
        format.html {redirect_to :back, :notice  => "Successfully updated user."}
      end
    else
      render :action => 'edit'
    end
  end

Изображение Модель:

class Picture < ActiveRecord::Base
  attr_accessible :file, :file_cache, :remove_file, :position, :remote_file_url
  mount_uploader :file, PictureUploader
  belongs_to :user
end

Модель пользователя

# encoding: UTF-8
class User < ActiveRecord::Base
  attr_accessible :remote_file_url, :beta_token, :wants_gender, :gender, :radius, :email, :password, :password_confirmation, :remember_me, :region, :latitude, :longitude, :gmaps, :pictures_attributes
  has_many :pictures, :dependent => :destroy
  accepts_nested_attributes_for :pictures, :allow_destroy => true
end

довольно простые вещи.... я удалил определения для пользовательской модели ....

= simple_form_for @user, :url => profile_path(@user) do |f|
  %ul.profiles.users
    - @user.pictures.each_with_index do |picture, i|
      %li.user
      .fields
        = f.simple_fields_for :pictures, picture do |picture_from|
          - if picture.file.present?
            = picture_from.input :_destroy, :as => :boolean
          = picture_from.input :position
          = picture_from.input :file
          = picture_from.input :remote_file_url, :as => :hidden
          = picture_from.input :file_cache

Ответы [ 2 ]

1 голос
/ 01 октября 2012

Это из-за attr_accessible.Если вы зададите имя переменной подключенного загрузчика attr_accessible, Ruby создаст для вас средства доступа ... которые будут мешать установщику CarrierWave.

Не назначайте никакие имена подключенных переменных загрузчика attr_accessible.

0 голосов
/ 22 февраля 2012

У меня была похожая проблема в том, что когда я устанавливал remote_image_url, изображение не сохранялось вместе с самой моделью.

Проблема заключалась в том, что изображение не сохранялось после установки remote_image_url.

Это вызвано тем, что я вызвал делегированный метод self.taker = 'Andrew' из модели User, который автоматически сохраняет «Andrew» из picture.taker в базе данных.Я должен был избежать этого и использовать 'self.picture.taker =' Andrew ', чтобы избежать сохранения изображения.Затем, когда я вызываю user.save, он сохранит соответствующее изображение и правильно создаст миниатюры.

Этот случай специфичен, но суть в том, что нужно проверить, действительно ли объект изображения был сохранен после того, как remote_image_url былустановлен.

...