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
問題
私の見解では、ダウンロードとそのダウンロードの現在のすべての翻訳を一覧表示したいのですが、取得できるのは各翻訳の現在のロケール データだけです。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
下 に移動すると、マウントされたアップローダーが Globalize によってオーバーライドされ、アクセス時にその列がクラスとして返されます。mount_uploader :file, DownloadFileUploader
String
助けを求める叫び
ヘルプ!