开源项目 写了一个用于自动化后台创建的 Gem - Carload

dongli1985 · September 30, 2016 · Last by dongli1985 replied at November 07, 2016 · 3226 hits

最近几天写了一个 Rails 后台自动化创建的 gem,名叫Carload(装满货物),它同Rails AdminActiveAdminAdministrate干的是同一件事,你要问我为啥不直接用那仨,我也说不出来,就是享受造轮子😝

我尽可能把重复性工作封装起来,比如配置 Dashboard 使用如下简明的 DSL(我喜欢 DSL。。):

# Dashboard class is used to tell Carload what models are needed to administrated,
# which attributes are shown, etc.

class Dashboard < Carload::Dashboard
  # There are two DSL block types:
  #
  #   model :<model_name> do |spec|
  #     # Whether model should be displayed when URL does not specify one
  #     spec.default = <true_or_false>
  #     # List of attributes that can be edited
  #     spec.attributes.permitted = [...]
  #     # List of attributes that will be shown on index page
  #     spec.index_page.shows.attributes = [...]
  #     # List of attributes with search terms that can be searched on index page (using Ransack gem)
  #     spec.index_page.searches.attributes = [ { name: ..., term: ...}, ... ]
  #   end
  #
  #   associate :<model_name_a> => :<model_name_b>, choose_by: :<attribute_in_model_b>

  model :product do |spec|
    spec.default = true
    spec.attributes.permitted = [ :name ]
    spec.index_page.shows.attributes = [ :name ]
    spec.index_page.searches.attributes = [
      { name: :name, term: :cont }
    ]
  end
  model :item do |spec|
    spec.attributes.permitted = [ :name, :product_id ]
    spec.index_page.shows.attributes = [ :name, 'product.name' ]
    spec.index_page.searches.attributes = [
      { name: :name, term: :cont },
      { name: 'product.name', term: :cont }
    ]
  end
  associate :item => :product, choose_by: :name
end

然后 Carload 就会为你准备如下后台:

并且还会处理错误哦:

搜索用的是 Ransack,切页用的是 Kaminari,权限管理用的是 Pundit,所以一切都要自动化起来!不过如果你对页面不满意,需要定制,也是可以的,直接在app/views/dashboard/<model_names>/目录下创建相应的 erb 文件就行,动作遵循 Rails 规范。

欢迎大家一起来造轮子!演示戳这里👈

更新:

在一定假设条件下可以上传图片了:

  • 使用carrierwave
  • 存储图片的属性名称必须是imagelogoimg

这些假设可以慢慢放宽,不过目前先 enjoy 这些吧:

TODO List

  • 支持图片上传(使用我之前造的轮子)【完成】
  • 实现多态关系【完成】
  • 支持普通文件上传,主要是使用酷点的外表

这坑好大的,要实现很多东西,到目前为止 activeadmin、rails_admin 和 administrate 都还有好多需要完善的地方。

#1 楼 @huacnlee 是的,完全处理多种数据关系也是醉了,我目前只是根据自己目前的需求实现功能,慢慢把坑填上。如果其他人能够用上更好了~

用过 activeadmin, rails_admin 最开始看起来确实方便,但是到后面发现自己入了一个又深又大的坑,然后又回到 bootstrap + jquery 自己手写,再也不敢用所谓自动化生成后台之类的东西了,有阴影了。

#3 楼 @kayakjiang 是的,深有同感,他们整的结构一堆一堆的。用过之后,我也开始自己手动写,但是写着写着感觉有些东西是可以抽出来的,而且每次都拷贝之前的代码,并且后来又加代码,越发觉得无法维护,所以又开始尝试把重复的东西包装起来,尽量不让使用者(主要是我自己)心烦~

#4 楼 @dongli1985 我是支持你的,后台管理这个东西基本上是我们程序员自己写,如果能够做到足够好,对广大程序员来说是一种福音

刚发现题目换了,这是自动换风格的吗?大赞

#1 楼 @huacnlee 坑的确很大,今天刚实现「多态」关系。😇

Administrate 不错

现在可以使用pg_searchelasticsearch进行搜索了。

You need to Sign in before reply, if you don't have an account, please Sign up first.