带有索引表的ActiveAdmin自定义页面

时间:2014-05-20 01:16:18

标签: ruby-on-rails activeadmin

我使用ActiveAdmin创建了一个自定义页面,如下所示:

ActiveAdmin.register_page "message_list" do

  controller do
    def index
      @collection = client().account.messages.list.sort_by{ |message| Date.rfc2822(message.date_sent) }.reverse
      render :layout => 'active_admin'
    end
  end
end

我创建了一个index.html.erb文件,其中包含我要在此页面上显示的表格。然而,这不是最佳的。如何使用也带有分页的活动管理标准表格布局并将其与我的表格信息一起显示?我知道ActiveAdmin PageDSL Class不包含#index,因此我不能简单地执行:

  index do
    selectable_column
    id_column
    column :to
    column :from
    default_actions
  end

除了在自定义页面上实现ActiveAdmin的表格布局外,如何更改页面本身的标题?截至目前,它被称为“索引”。

2 个答案:

答案 0 :(得分:10)

更简单的方法是为您的邮件类Message定义ActiveAdmin资源,并将操作限制为仅允许:index

ActiveAdmin.register Message do
  actions :index

  index do
    selectable_column
    id_column
    column :to
    column :from
    default_actions
  end

  controller do
    def scoped_collection
      super.where(account_id: account.id).order(:date_sent)

      # Or provide a custom collection similar to the current implementation:
      # client().account.messages.list.sort_by{ |message| Date.rfc2822(message.date_sent) }.reverse
    end

  end
end

如果需要,还可以通过:as方法提供#register选项来重命名资源:

ActiveAdmin.register Message, as: "Account Message" do
  # ...
end

答案 1 :(得分:3)

虽然如果您可以使用ActiveAdmin资源而不是自定义页面,但已接受的答案效果很好,但可以通过Arbre在自定义页面上获取索引样式表:

<%=
  Arbre::Context.new({}, self) do
    table_for(client().account.messages, sortable: true, class: 'index_table') do
      column :id
      column :created_at
    end
  end
%>