2013-07-17 3 views
4

Я бы хотел установить несколько изображений без загрузки. (Они уже существуют, или другая задача сохраняет их ...)Carrierwave: установить путь изображения и пропустить загрузку

Если я пытаюсь (в рельсах консоли):

user = User.last 
user.picture = '/some/picture.jpg' 
user.save 
user.picture # nil 

Единственный способ сделать это, чтобы установить remote_picture_url, а затем удалить загрузки (что глупо)

Есть ли какой-либо метод в несущей, который позволяет вам изменять только имя файла?

+1

Если вы хотите изменить имя, но местоположение остается тем же, почему вы не используете команду 'update_all', например' User.update_all ("picture = 'picture.jpg'", 'id = 1') ' AFAIK это не вызывает обратный вызов, который, в свою очередь, не позволит файлу-носителю сохранить файл – Viren

+0

Возможный дубликат [carrierwave: указать на существующее изображение] (http://stackoverflow.com/questions/17635861/carrierwave-point-to-existing-image) – juanpastas

+0

Я ответил на аналогичный вопрос здесь http://stackoverflow.com/a/39706386/1197775 – juanpastas

ответ

5
class User < ActiveRecord::Base 
    attr_accessible :picture 
    # Don't want to write to the database, but want to be able to check 
    attr_writer :skip 

    # set a default value 
    def skip 
    @skip ||= false 
    end 

    mount_uploader :image, PictureUploader 

    # Make sure that the skip callback comes after the mount_uploader 
    skip_callback :save, :before, :store_picture!, if: :skip_saving? 

    # Other callbacks which might be triggered depending on the usecase 
    #skip_callback :save, :before, :write_picture_identifier, id: :skip_saving? 

    def skip_saving? 
    skip 
    end 
end 

class PictureUploader < Carrierwave::Uploader::Base 
    # You could also implement filename= 
    def set_filename(name) 
    @filename = name 
    end 
end 

Если у вас есть настройки выше, в консоли:

user = User.last 
user.picture.set_filename('/some/picture.jpg') 
user.skip = true 
# Save will now skip the callback store_picture! 
user.save 
user.picture # /some/picture.jpg 

Следует отметить, что если вы в консоли и обновить существующую запись, которая имеет прикрепленный файл (т.е. user.picture.file), он покажет старый url/location. Если вы выйдете из консоли (если вы не находитесь в режиме песочницы) и вернитесь и запросите тот же объект, у него будет обновленный URL-адрес/местоположение.

Смежные вопросы