Ruby&Rails---ActiveAdmin快速建立属后台

github: https://github.com/activeadmin/activeadmin
官方文档:https://activeadmin.info/index.html

安装

devise是用于登录验证

gem 'activeadmin'
gem 'devise'

由于我们使用devise,所以我们需要运行这个构造器

rails g active_admin:install

执行后会创建这些文件

    app/admin/dashboard.rb
    app/assets/javascripts/active_admin.js
    app/assets/stylesheets/active_admin.scss
    config/initializers/active_admin.rb

终端执行

bin/rails db:migrate

activeAdmin 会在seeds.rb中生成默认用户的创建方式,终端执行下面命令来生成后台用户

bin/rails db:seed

然后就可以访问了,会让你登录,就用刚生成的用户的信息

http://192.168.20.106:3000/admin/
如果要关闭用户登录验证功能,可以用:

initializer/active_admin

  config.current_user_method = false
  config.authentication_method = false
Comment

因为不需要comment(注解)这个功能,所以在initializer中的active_admin中关闭这个功能
config.comments = false

Utility Navigation(导航)

在右上角有一些快速导航按钮,默认的有两个,一个是当前的admin用户,另外一个是登出按钮,我们可以增加导航按钮

ActiveAdmin.setup do |config|
  config.namespace :admin do |admin|
    admin.build_menu :utility_navigation do |menu|
      menu.add label: "ActiveAdmin.info", url: "http://www.activeadmin.info",
                                          html_options: { target: :blank }
      admin.add_current_user_to_menu  menu
      admin.add_logout_button_to_menu menu
    end
  end
end
创建Resources

eg: Post是我的一个model

bin/rails  g active_admin:resource Post

执行后会生成app/admin/post.rb文件

permit_params

使用permit_params方法来定义哪些属性可以被修改,如果修改了没有被permit_params定义的属性,修改不会生效

ActiveAdmin.register Post do
  permit_params :title, :content, :publisher_id
end

定义一个Resource中的action

默认的,所有的CRUD的actions都可以操作,如果要禁用其中的某些操作,用如下定义:

ActiveAdmin.register Post do
  actions :all, except: [:update, :destroy]
end

自定义Menu

一个resource默认都会在全局导航栏上,如果要禁止一个resource出现在全局导航栏上,我们可以用:

ActiveAdmin.register Post do
  menu false
end
  menu label: "自定义标题",priority: 1

menu有4个选项可以用:
:label - 指定该menu的名称
:parent -指定一个顶级菜单
:if -指定一个条件
:priority - 默认为10,在全局导航栏上的位置

添加自定义的menu

config/initializers/active_admin.rb

  config.namespace :admin do |admin|
    admin.build_menu do |menu|
      menu.add label: "The Application", url: "/", priority: 0

      menu.add label: "Sites" do |sites|
        sites.add label: "Google",
                  url: "http://google.com",
                  html_options: { target: :blank }
        sites.add label: "Github",
                  url: "http://github.com"
      end
    end
  end
自定义resource的index页面

提供4中样式,Block,Blog,Grid,Table,一般我们用的是table,也是默认的样式。这里只介绍table.

默认的,index页面会展示对应的model的所以字段,可供查看,修改,删除。

如果要自定义字段,可以用:

index do
  selectable_column
  column :title
  column "My custom name" ,:name
end

这些自定的字段要被index包裹
selectable_column 显示勾选框,用于批量操作
column 显示什么字段,该字段必须是model的字段名,可以给这个字段另取一个别名

还可以根据条件设置特别的row样式,这个some_style样式放在app/asset/stylesheets/active_admin.scss中

  index(row_class: ->item { 'some_style' if item.is_show }) do
  end
自定义Actions

如果要给resource设置链接到查看,修改,删除这几个按钮,可以用actions方法

index do
  selectable_column
  column :title
  actions
end

也可以增加自定的链接

index do
  selectable_column
  column :title
  actions do |post|
    item "Preview", admin_preview_post_path(post), class: "member_link"
  end
end

获取重新设置链接

index do
  column :title
  actions defaults: false do |post|
    item "View", admin_post_path(post)
  end
end
Form(model的创建或者修改表单)

默认的表单是展示所有的字段

form do |f|
  f.semantic_errors # shows errors on :base
  f.inputs          # builds an input field for every attribute
  f.actions         # adds the 'Submit' and 'Cancel' buttons
end

示例:

form title: 'A custom title' do |f|
    inputs 'Details' do
      input :part1
      input :part2, label: "Publish Post At"
      li "Created at #{f.object.created_at}" unless f.object.new_record?
      input :part3
    end
    panel 'Markup' do
      "The following can be used in the content below..."
    end
    inputs 'Content', :part3
    para "Press cancel to return to the list without saving."
    input :created_at, as: :datepicker,
            datepicker_options: {
                min_date: "2013-10-8",
                max_date: "+3D"
            }
    actions
  end

对应的图示:


图片.png
增加action的按钮

link_to path 中的path指定的方式是

  1. 命名空间_model的复数形式_path
  2. controller名_方法名_path
  action_item only: :index do
    link_to '刷新疑似状态', admin_app_oral_memories_path, notice: "刷新成功"
  end
增加batch操作按钮
  batch_action "封禁" do |selection|
    
  end

Index Filter 过滤器

 filter :name, label: "name"

一般的,通过上面这个形式就好了,activeadmin会自动判断其类型。

或者有另个情况,有个关联表。

filter :location_id, label: "地点", as: :select, collection: AppExamLocation.all.map{|x| [x.location,x.id]}

通过:as可以指定类型,提供这一下这几种类型


    :string - A drop down for selecting “Contains”, “Equals”, “Starts with”, “Ends with” and an input for a value.
    :date_range - A start and end date field with calendar inputs
    :numeric - A drop down for selecting “Equal To”, “Greater Than” or “Less Than” and an input for a value.
    :select - A drop down which filters based on a selected item in a collection or all.
    :check_boxes - A list of check boxes users can turn on and off to filter

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358