Rails + Active Admin: 显示名称

6

我正在使用Ruby on Rails的Active Admin,但是我在面板中展示某些模型时遇到了问题。

User类为例,如果我没有定义任何显示友好信息的方法,那么我会看到#<User:00000006b47868>。因此Active Admin建议为每个类实现一个方法来指定如何显示它们。

根据文档(http://activeadmin.info/docs/3-index-pages/index-as-table.html),Active Admin按以下顺序查找其中的一个方法来猜测应该显示什么:

:display_name、 :full_name、 :name、 :username、 :login、 :title、 :email、 :to_s

因此,在User类中编写这个方法就可以解决问题:

def display_name
  return self.id.to_s + '-' + self.full_name
end

然而,在使用Active Admin之前,我已经在其他地方(例如视图中)使用了display_name方法以便友好地显示用户名,而不想在Active Admin面板中显示相同的内容。
我不能更改该方法的名称,因为我在整个项目中使用display_name方法,并且更改它可能会导致应用程序出现错误。
这种情况下的理想解决方案是有一个类似于active_admin_name方法,它被Active Admin用来在面板中显示模型。所以问题是: 是否有一种方法可以调用Active Admin而不是display_name方法?例如,按以下顺序产生结果: :active_admin_name, :display_name, :full_name, :name, :username, :login, :title, :email, :to_s 我已经在Active Admin文档和config/initializers/active_admin.rb中搜索过,但没有找到一种方法来做到这一点。
谢谢!
2个回答

12

尝试

ActiveAdmin.setup do |config|    
  config.display_name_methods = [:active_admin_name, :display_name ...]
end

你可以在lib/active_admin/application.rb中找到此设置。


我认为我的项目中没有那个文件。我尝试创建它并将代码放在那里,但是没有起作用。我还尝试将该代码放在 config/initializers/active_admin.rb 中,但也没有好的结果。我发现在 Active Admin 源代码中有一些类似于你的代码:https://github.com/gregbell/active_admin/blob/master/lib/active_admin/application.rb 也许我们需要将其放在其他文件中? - eze.scaruli
它适用于我使用AA 0.6.0的项目。我在“config/initializers/active_admin.rb”中定义了“config.display_name_methods = [:admin_display_name, ....]”。请确保重新启动您的应用程序。 - baxang
2
@eze.scaruli 应该被标记为正确答案。请注意,配置可能在不同的位置,对我来说它在 config/initializers/active_admin.rb 中。 - Alexander Presber

0

您也可以使用:title键为每个页面定义它,例如:

show(title: 'Something') do |record|
  ...
end

# or with a Proc
show(title: ->(record) { record.another_method_to_display }) do |record|
  ...
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接