Проблемы с загрузками Globalize и CarrierWave в приложении Rails 4.2
У меня проблемы с переведенными файлами в моем приложении Rails 4.2.
Фон
Вот версии драгоценных камней, которые я использую:
gem "rails", "4.2.1"
gem "carrierwave" # 0.10.0
gem "globalize" # 5.0.1
И моя модель:
class Download < ActiveRecord::Base
belongs_to :download_type
has_and_belongs_to_many :products
translates :title, :part_number, :file
mount_uploader :file, DownloadFileUploader
validates :title, presence: true
def to_param
"#{id}-#{title.parameterize}"
end
end
Проблемы
На мой взгляд, я хочу перечислить Download и все текущие переводы для этой загрузки, но все, что я получаю, это данные о текущей локали для каждого перевода. В консоли Rails:
> I18n.locale => :en > download = Download.find(481) => #<Download id: 481, title: "SmartSensor HD Quick-reference Guide (User)", part_number: "WX-500-0171", download_type_id: 3, created_at: "2015-01-16 22:49:13", updated_at: "2015-04-20 16:59:25", file: "smartsensor_hd_user_quick-reference_guide-20150116...", download_updated_at: nil> > download.translations.count => 8 > download.translated_locales => [:de, :en, :es, :fr, :it, :pt, :ru, :"zh-CN"] > download.file.class => DownloadFileUploader > download.file.url => "/uploads/download/file/481/smartsensor_hd_user_quick-reference_guide-20150116154913-en.pdf" > download.title => "SmartSensor HD Quick-reference Guide (User)" > download.part_number => "WX-500-0171"
И когда язык меняется:
> I18n.locale = :de => :de > download.file.class => DownloadFileUploader > download.file.url => "/uploads/download/file/481/smartsensor_hd_user_quick-reference_guide-20150116154913-en.pdf" > download.title => "SmartSensor HD Kurzanleitung" > download.part_number => "WX-502-0006"
Если я попытаюсь получить доступ к переводу напрямую:
> I18n.locale = :de => :de > download.translation.file.class => String
Если я изменю способ установки загрузчика в моей модели:
Translation.mount_uploader :file, DownloadFileUploader
Существующие переводы перечислены правильно - включая файл, но я больше не могу загружать файлы. Что хранится в базе данных это:
/uploads/download/translation/file/401/%23%3CActionDispatch%3A%3AHttp%3A%3AUploadedFile%3A0x007f9c12e6fe00%3E
Обратите внимание, что он вставляет
/translation
в путь, который я могу исправить в загрузчике, но имя файла на самом деле не является файлом.Если я перееду
translates :title, :part_number, :file
нижеmount_uploader :file, DownloadFileUploader
в моей модели Globalize переопределяет смонтированный загрузчик, и этот столбец возвращается как классString
при доступе к нему.
Крик о помощи
Помогите!
2 ответа
Я написал этот простой камень https://github.com/dalpo/carrierwave_globalize. который он должен позволять использовать Globalize и Carrierwave вместе.
Вы должны расширить свою модель с помощью модуля CarrierwaveGlobalize и использовать mount_translated_uploader
метод класса, чтобы смонтировать ваш загрузчик несущей вместо mount_uploader
mehtod.
Следуйте инструкциям в readme для получения дополнительной информации.
Старый вопрос, но... не используйте Globalize с CarrierWave для одного и того же атрибута, они оба переопределяют поведение по умолчанию.
Вы можете сделать это в вашей модели:
class Download < ActiveRecord::Base
belongs_to :download_type
has_and_belongs_to_many :products
translates :title, :part_number
mount_uploader :file, DownloadFileUploader
validates :title, presence: true
def to_param
"#{id}-#{title.parameterize}"
end
end
А затем переопределите хранение файлов для вашего загрузчика в системе, чтобы использовать I18n.locale:
def store_dir
"uploads/#{I18n.locale}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end