Как я могу заставить ActiveStorage работать в моих локалях? - PullRequest
0 голосов
/ 30 июня 2018

Как я могу заставить 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 работать с моей интернационализацией?

1 Ответ

0 голосов
/ 10 июля 2018

Мне пришлось сменить маршрут. Я добавил 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
...