Carrierwave object.url VS object.image_url - PullRequest
0 голосов
/ 11 июня 2019

В моем приложении Rails 5 я использую Carrierwave для загрузки изображений.

Мне нужно модель, которая использует тот же загрузчик:

account.rb:

mount_uploader :logo, ImageUploader

image.rb:

mount_uploader :image, ImageUploader

Это загружает файл в:

"uploads / # {model.class.to_s.underscore} / # {mount_as} / # {model.id} "

Странно, что теперь я могу использовать:

@account.logo&.url(:thumb) // works!
@account.logo&.image_url(:thumb) // error!

Но на модели изображения (один продукт имеет много изображений):

@product.images.first&.image_url(:thumb) // works!
@product.images.first&.url(:thumb) // error!

Так что в первом случае я должен использовать .url, а во втором .image_url

И я понятия не имею, почему ... нужна помощь?

1 Ответ

1 голос
/ 11 июня 2019

Метод экземпляра image_url определяется динамически на основе столбца, который передается в mount_uploader и просто вызывает url для столбца. Определение выглядит так ...

def #{column}_url(*args)
  #{column}.url(*args)
end

Итак, я подозреваю, что logo_url будет работать на @account (хотя я не проверял это)

источник

...