ruby-on-rails 活动管理员:如何设置页面标题?

nr9pn0ug  于 2022-12-05  发布在  Ruby
关注(0)|答案(9)|浏览(146)

这看起来应该是相对简单的,但我在寻找答案时遇到了一些麻烦:
如何在ActiveAdmin中设置页面标题?

raogr8fs

raogr8fs1#

巩固答案并补充一点:
大部分内容都在this page on the wiki上(或者我很快会把它放在那里)。
在为activeadmin注册模型的文件(例如app/admin/user.rb)中,可以有

ActiveAdmin.register User do
  # a simple string
  index :title => "Here's a list of users" do
    ...
  end

  # using a method called on the instance of the model
  show :title => :name do
    ...
  end

  # more flexibly using information from the model instance
  show :title => proc {|user| "Details for "+user.name } do
    ...
  end

  # for new, edit, and delete you have to do it differently
  controller do
    def edit
      # use resource.some_method to access information about what you're editing
      @page_title = "Hey, edit this user called "+resource.name
    end
  end
end
vdgimpew

vdgimpew2#

经过搜寻得到了它,
您可以将:title属性添加到活动管理员块中。
例如,
1)设置索引页标题:

index :title => 'Your_page_name' do
....
end

2)设置显示页标题:

show :title => 'Your_page_name' do
....
end
gopyfrb3

gopyfrb33#

如果有人(像我一样)还在为new行动而挣扎:

def new
  @page_title="My Custom Title"
  super
end

不要忘记添加super。但是,edit操作不需要添加super

k3fezbri

k3fezbri4#

根据这篇文章,你可以在选择的操作中使用如下的行:

@page_title="My Custom Title"

例如,要在预先存在的操作(如“new”)中实现此操作,您可以执行以下操作:

controller do
  def new do
    @page_title="My Custom Title"
    new! do |format|
       format.html{render "my_new"}
    end
  end
end
gpnt7bae

gpnt7bae5#

我的例子:

两个模型及其关联:

class Course < ApplicationRecord
    has_many :lessons, dependent: :destroy
end
class Lesson < ApplicationRecord
  belongs_to :course
end

我想在课程索引页中显示课程标题,我测试了两种方法。

仅用于索引

ActiveAdmin.register Lesson do
  belongs_to :course, optional: true
  permit_params :title
  controller do
    def index
      @page_title = " #{Course.find(params[:course_id]).try(:title)}"
      super
    end
end

或用于所有操作

ActiveAdmin.register Lesson do
  belongs_to :course, optional: true
  permit_params :title
  controller do
    before_action {  
      @page_title = " #{Course.find(params[:course_id]).try(:title)}"
    }
  end
end

则可以使用@page_title

index :title=> @page_title  do
    selectable_column
    id_column
    column :title
    actions

  end
0yycz8jy

0yycz8jy6#

如果我没猜错你的问题,你想在activeadmin中重命名一个模型,使其在所有操作中都以另一个名称出现,例如,在ActiveAdmin中重命名“Post”模型使其出现“Article”,要做到这一点,只需转到Admin文件夹中的模型文件,将第一行从

ActiveAdmin.register Post do

ActiveAdmin.register Post, as: "Article"

如果出了问题,重新启动你的Rails服务器、Docker或其他任何东西

im9ewurl

im9ewurl7#

简单地做

index title: "Me new title"
cgh8pdjw

cgh8pdjw8#

如果您正在使用ActiveAdmin.register_page并希望在顶部设置菜单名称和页面名称,请尝试以下操作:

ActiveAdmin.register_page "ReleaseNotes" do
  menu label: "Release Notes"
  
  content title: "Release Notes" do
    render partial: 'index'
  end
end
sc4hvdpw

sc4hvdpw9#

还可以利用控制器操作来为更改页面标题给予更大的粒度,特别是在利用带有before_action的I18 n时,就像@dayudodo在Answer中所做的那样。

I18 n方法

ActiveAdmin.register User do
  controller do
    before_action :page_title

    # other controller stuff...

    def page_title
      @page_title = I18n.t(params[:action], scope: "active_admin.resources.user.page_title")
    end

    # other controller stuff...
  end
end

我已经按照ActiveAdmin文档的建议在本地复制了active_admin yml,以便可以对其进行修改以进行自定义

en:
  # other yaml stuff...

  active_admin:
    # more active_admin yaml stuff...

    resources: # added this key for organizing the customization
      # more resources...
      
      user:
        page_title:
          index: Custom Index Title
          new: Custom New Title

  # other yaml stuff...

这样,您仍然可以利用I18 n注入的变量,假设您的控制器中有方法可以执行以下操作:
第一次

没有国际化

ActiveAdmin块中的常量违反了Ruby样式指南,并将引发liter错误:定义块中的常量。因此我们可以改为memoize

ActiveAdmin.register User do
  controller do
    before_action :page_title

    # other controller stuff...

    def action
      params[:action].to_sym
    end

    def page_title
      @page_title = page_titles_per_action[action]
    end

    def page_titles_per_action
      @page_titles_per_action ||= { index: "Custom Index Title", new: "Custom New Title" }
    end

    # other controller stuff...
  end
end

相关问题