如何使 ActiveStorage 在我的语言环境中工作?

How can I make ActiveStorage work within my locales?

如何使 Activestorage 在我的语言环境中工作,例如 www.localhost:3000/es/

我启动了 activestorage 并且 运行。图像已保存并可在视图中查看。

然后,我使用以下代码将语言环境添加到我的路线中:

scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do

    resources :posts
    root to: 'pages#index'

get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| I18n.available_locales.none? { |locale| req.path.starts_with? locale.to_s } }

我的 application_controller.rb

中也有一个之前的操作
before_action :set_locale

def set_locale
  I18n.locale = params[:locale] if params[:locale].present?
end

def self.default_url_options(options = {})
  { locale: I18n.locale }
end

如果我删除上面的代码,就会显示图像。如何使 image_tags 与我的国际化一起工作?

我不得不改变路线。我添加了一个 LocaleConstraint。 以下是适用于 ActiveStorage 的路由:

class LocaleConstraint
  def self.matches?(request)
    (I18n.available_locales.none? { |locale| request.path.starts_with? locale.to_s }) && (!request.path.include? 'rails/active_storage/blobs')
  end
end

Rails.application.routes.draw do

  scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do

    devise_for :users, controllers: { registrations: 'registrations' }

    resources :posts

    get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
    get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: LocaleConstraint

  end

end