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
对应的图示:
增加action的按钮
link_to path 中的path指定的方式是
- 命名空间_model的复数形式_path
- 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