活动管理员动态网站标题

时间:2012-06-22 20:05:52

标签: ruby-on-rails activeadmin multi-tenant

Active Admin表示您可以通过这种方式更改网站标题:

网站标题选项 您也可以更新标题或在初始化程序中使用可选图像。此外,您可以设置链接。默认情况下,没有链接,标题设置为Rails.application类名的名称。

# config/initializers/active_admin.rb
config.site_title = "My Admin Site"
config.site_title_link = "/"    ## Rails url helpers do not work here
config.site_title_image = "site_log_image.png"

此外,他们说您可以按命名空间配置标题,如下所示:

ActiveAdmin.setup do |config|
  config.site_title = "My Default Site Title"

  config.namespace :admin do |admin|
    admin.site_title = "Admin Site"
  end

  config.namespace :super_admin do |super_admin|
    super_admin.site_title = "Super Admin Site"
  end
end

我正在构建一个多租户网站,我希望site_title基于当前的租户名称。有没有办法在那里放置一个基于租户变化的动态字段?

由于

3 个答案:

答案 0 :(得分:5)

我知道这是一个老问题,但我刚刚发现你可以在当前的ActiveAdmin主机中执行以下操作:

# config/initializers/active_admin.rb
ActiveAdmin.setup do |config|
  ...
  config.site_title = ->(view) {
    # Return what you like from this lambda. Runs in the scope of the controller so you can call your helpers directly.
    # For example, I do something like:
    administrator_signed_in? ? current_tennant.name : "My Site's Generic Name"
  }
  ...
end

答案 1 :(得分:1)

我通过猴子修补SiteTitle类来实现这一目标。

将其放入初始化程序并根据您的用户模型进行更改:

ActiveAdmin::Views::SiteTitle.class_eval do
    private
    def title_text
        if current_admin_user
            if current_admin_user.has_role? :admin
                "Site Admin"
            elsif current_admin_user.has_role? :guest
                "Site Guest"
            else
                helpers.render_or_call_method_or_proc_on(self, @namespace.site_title)
            end
        else
            helpers.render_or_call_method_or_proc_on(self, @namespace.site_title)
        end
    end
end

答案 2 :(得分:0)

在ActiveAdmin初始化程序设置中,这样的事情对我有用:

  config.site_title = proc { I18n.t("admin.#{controller_name}.title") }