如何在ActiveAdmin中自定义一列并显示其余内容

17

我在我的Rails应用程序中使用Active admin gem。我添加了资源书籍,它有20个列,现在我只需要自定义一个列并打印其余的内容。我尝试了下面的代码

ActiveAdmin.register Book do
 index do
  column :description do 
    raw "<a class='view_description button'>View Description</a>"
  end
 end
end
但是它隐藏了所有的列,只显示描述。任何帮助都将是有用的。

2
如果您从自定义开始,如 https://github.com/phoet/on_ruby/blob/master/app/admin/users.rb#L19 ,则需要列出所有行。 - phoet
2
对于大表格来说确实很困难,谢谢提供链接。 - Senthil
7个回答

45

这个怎么样?

ActiveAdmin.register Book do
  index do
    columns_to_exclude = ["name"]
    (Book.column_names - columns_to_exclude).each do |c|
      column c.to_sym
    end
    column :description do 
      raw "<a class='view_description button'>View Description</a>"
    end
   end
end

在互联网上到处搜索这个!谢谢! - istrasci
这是StackOverflow上最好的答案。 - spinlock
2
但在这种情况下,默认显示某些列即引用列的链接(即href)未被保留。如何获取它,而不需要使用link_to方法添加单独的列? - Mayuresh Srivastava

13

如果您指定了索引块,就需要放置所有想要显示的列,因为您正在替换“默认”行为。

在您的情况下,您需要使用类似以下方式添加其他19列:

ActiveAdmin.register Book do
 index do
  column :one
  column :two
  column :three
  column :name
  column :title
  column :pages
  column :description do 
    raw "<a class='view_description button'>View Description</a>"
  end
 end
end

只是一个小建议,最好使用link_to '查看描述', root_path, class: 'view_description button'而不是原始链接。 - Alex91ckua

10

在我的情况下,我只想要重命名一个列,我是这样做的 ->

index do
    column :one
    column :two  
    ....
    column "View Description", :description # This will change you column label **description** to **View Description**
end

4

1
MVP答案就在这里... 这也适用于show do等等... 这是使用active_admin内部检索所有列的好方法。 - vinhboy

3

当您想要向默认列表中添加或自定义单个列时,此方法同样适用(基于一个属于关联)。

ActiveAdmin.register Book do
  index do
    column :publisher do |book|
      book.publisher.name
    end
    Book.column_names.each do |c|
      column c.to_sym
    end

  end
end

2
一般来说,这很容易...
ActiveAdmin.register Book do
  index do
    (Book.column_names - ["column_to_customize"]).each do |c|
      column c.to_sym
    end
    column :column_to_customize do 
      raw "<a class='view_description button'>View Description</a>"
    end
  end
end

1
但在这种情况下,默认显示某些列即引用列的链接(即href)未被保留。如何获取它,而不需要使用link_to方法添加单独的列? - Mayuresh Srivastava

0

这种方法在一般情况下相当准确地模拟了原始行为:

index do
  selectable_column

  Book.column_names.each do |c|
    # Filter foreign IDs and counter caches
    column c.to_sym unless c.ends_with?('_id') || c.ends_with?('_count')
  end

  Book.reflect_on_all_associations(:belongs_to).map(&:name).each do |association|
    column association
  end

  # Whatever custom thing you want

  actions
end

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