我正在使用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
中搜索过,但我找不到一种方法来做到这一点。
谢谢!
Try
ActiveAdmin.setup do |config|
config.display_name_methods = [:active_admin_name, :display_name ...]
end
您可以在lib/active_admin/application.rb
您也可以使用:title
key为每个页面定义它,如下所示:
show(title: 'Something') do |record|
...
end
# or with a Proc
show(title: ->(record) { record.another_method_to_display }) do |record|
...
end