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-адрес/местоположение.
Если вы хотите изменить имя, но местоположение остается тем же, почему вы не используете команду 'update_all', например' User.update_all ("picture = 'picture.jpg'", 'id = 1') ' AFAIK это не вызывает обратный вызов, который, в свою очередь, не позволит файлу-носителю сохранить файл – Viren
Возможный дубликат [carrierwave: указать на существующее изображение] (http://stackoverflow.com/questions/17635861/carrierwave-point-to-existing-image) – juanpastas
Я ответил на аналогичный вопрос здесь http://stackoverflow.com/a/39706386/1197775 – juanpastas