如何在ActiveAdmin Rails中跨多个列显示单个属性的值

时间:2017-11-13 13:30:43

标签: ruby-on-rails activeadmin

对于ActiveAdmin中的资源页面(当前是Rails3),我有一个列列表显示资源对象上单个属性的值列表,在视图模式下显示为列表中每个值的字符串行在编辑模式下,它是一个较大集合的复选框列表,用于选择值。这些值来自单个模型属性,该属性是作为文本字段存储在数据库中的序列化数组。

对于show处理程序

    show do |company|
     attributes_table do
      ...
      row 'Strategies', :strategy_codes do
        table_for company.strategy_codes do
          column do |code|
            code
          end
        end
      end
      ...
    end
   end

对于form处理程序

  form do |f|
    ...
    f.inputs 'Strategies' do
      f.input :strategy_codes, label: false, as: :check_boxes,
              collection: f.object.available_strategy_codes
              .collect { |l| ["#{l}",l]}.unshift(["Select All"]),
              hint: 'Select the desired strategies',
              input_html: { multiple: true }
    end
    ...
    f.actions
  end

上述每一项都将strategy_codes的值显示为单列(即30行或更多行)。

在这两种情况下,对于显示和编辑,我想组织表的多个列而不是单个值列的值,因为值列表可以是30个项目或更多,它们是短值(5个字符) )。我希望能够指定它分布在2,3或4等列中,以便它是这个属性值的更短但更宽的多列显示。

这可以作为ActiveAdmin视图方法的修改或补充吗?

更新

我设法让show处理程序为此工作“在多列中显示值列表”挑战:

  row 'Strategies', :strategy_codes do
    column_count = 4
    row_count = (company.strategy_codes.count / column_count).ceil
    table_for company.strategy_codes.in_groups_of(row_count).transpose do
      (1..row_count).each_with_index do |c,i|
        column do |code|
          code[i]
        end
      end
    end
  end

由于我希望每个列在移动到下一列之前填满行,因此我转换了由in_groups_of生成的数组。

我还没有太多运气但是试图让form处理程序的复选框选项值的集合以相同的方式跨列显示。

我想知道通过注入一些css或javascript来尝试让客户端处理这个问题会更好。

如果我能够使form checkboxes解决方案工作没有“首先垂直填充列”功能,而是将每行填满,然后向下移动到下一行,我也很喜欢这种方法。

想法?

1 个答案:

答案 0 :(得分:0)

我最终按照您的考虑使用CSS进行了此操作。

active_admin.scss

void FCFS() {
    Scheduler data;
    printf("Retrieved value: %d\n", data.processes[0][0]); 
    // prints 3
    ...
}