Rails + Active Admin:显示名称

时间:2013-04-27 19:23:14

标签: ruby-on-rails ruby web-applications activeadmin

我正在使用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 个答案:

答案 0 :(得分:5)

尝试

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

您可以在lib/active_admin/application.rb

中找到此设置

答案 1 :(得分:0)

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

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

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