Rails 5:在活动管理员的资源中包含不相关的类

时间:2018-12-12 13:44:05

标签: ruby-on-rails ruby include ruby-on-rails-5 activeadmin

我有带有活动管理员的Rails 5 API应用程序,可以正常工作。我在lib中创建了一个类,该类调用app_languages.rb并包含用于语言属性的哈希数组。我想共享活动管理资源中的数据并使用它,但是它不起作用。我尝试编写require'/lib/app_languages.rb',但是它不起作用,并且出现此错误:cannot load such file -- /lib/app_languages.rb

这是app_languages.rb:

class AppLanguages
  keys = [:language, :flag]
  values = ["English", "EN", "French", "FR", "Spanish", "SP", "Japanese", "JPN", "Hebrew", "HEB"]
  LANG = values.each_slice(2).map { |value| Hash[keys.zip(value)] }
end

如何从活动管理员的资源中访问app_languages.rb的变量?

编辑:我读到Rails 5中存在自动加载问题,因此我已经在application.rb中进行了配置:config.autoload_paths << "#{Rails.root}/lib" 并在每个环境中进行配置:config.eager_load = true

1 个答案:

答案 0 :(得分:0)

  • 我首先将其从类更改为模块:module AppLanguages
  • 然后将所有3个项目更改为常量。 KEYS VALUES LANG
  • 在文件的底部添加ActiveAdmin.send(:include, AppLanguages)(或者,如果不是ActiveAdmin,则要扩展的模块)。
  • 最后,将其放入自动加载程序或创建一个初始化程序来要求它。

我建议使用此方法,因为您不必在ActiveAdmin本身中的任何地方都需要它,因为代码会保留在您的应用程序中。此外,如果模块中的某些内容出现故障(在这里不太可能发生),则更容易找到代码源。