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

时间:2018-06-30 05:35:54

标签: ruby-on-rails rails-i18n rails-activestorage

如何使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 中也有一个前置动作

SELECT  convert(datetime, CONVERT(nvarchar(10), GETDATE(), 120)) 

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

1 个答案:

答案 0 :(得分:0)

我不得不改变路线。我添加了一个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