• 三年前线下听了分享的路过。

    感谢 Rei 的分享,我直到去年才开始用 Stimulus😂,很惭愧

  • ActiveAdmin 定制化实战 at 2020年07月14日

    感谢分享,都是一些很实用的技巧,已经接近两年没用 ActiveAdmin 了,翻了翻自己的陈年老代码,我也分享一些个人感觉有些作用的技巧吧😂

    • 指定某些 controller 下引入特定的 JS 文件。当时应该是为了只在需要用到富文本编辑器的页面去引用对应的 JS。
    # config/initializers/active_admin.rb
    module AdminPageLayoutOverride
      def build_active_admin_head
        # you can move the call to super at the end, if you wish
        # to insert things at the begining of the page
        super
    
        # this will be added at the end of <head>
        within @head do
          white_list = %w(admin/announcements admin/distributions admin/introductions admin/versions)
          if params['controller'].in?(white_list)
            text_node javascript_include_tag(params['controller'])
          end
        end
      end
    end
    ActiveAdmin::Views::Pages::Base.send :prepend, AdminPageLayoutOverride
    
    • 增加自定义的 attribute
    # config/initializers/active_admin.rb
    module ActiveAdmin
      module Views
        class RtfContent < ActiveAdmin::Component
          builder_method :rtf_content
    
          def build(content, attributes = {})
            super(attributes)
            textarea class: 'rtf-content-ckeditor', name: SecureRandom.uuid do
              content
            end
          end
        end
      end
    end
    
    • 在多个 namespace 使用 ActiveAdmin + Devise
    # config/initializers/active_admin.rb
    ActiveAdmin.setup do |config|
    #...
      config.namespace :admin do |ns|
        ns.site_title = "Admin System"
        ns.authentication_method = :authenticate_admin_user!
        ns.authorization_adapter = ActiveAdmin::PunditAdapter
        ns.pundit_default_policy = 'AdminPolicy'
        ns.current_user_method = :current_admin_user
        ns.logout_link_path = :destroy_admin_user_session_path
      end
    
      config.namespace :public do |ns|
        ns.site_title = "Public NS"
        ns.site_title_link = '/public'
        ns.authentication_method = :authenticate_teacher!
        ns.current_user_method = :current_teacher
        ns.logout_link_path = :destroy_teacher_session_path
        ns.footer = '教师工作台'
      end
    #...
    end
    
    # Devise 的处理
    class ActiveAdmin::Devise::SessionsController
      def after_sign_out_path_for(resource_or_scope)
        case resource_or_scope
        when :teacher
          new_teacher_session_path
        when :admin_user
          new_admin_user_session_path
        end
      end
    
      def after_sign_in_path_for(resource)
        case resource
        when Teacher
          public_root_path
        when AdminUser
          admin_dashboard_path
        end
      end
    end
    
  • 反过来想一想:如果 private 方法在 class 内部都不能调用,那什么时候允许调用?

  • 维护一个允许的参数白名单,但是新增参数的时候一不小心就会忘记掉,导致生成 URL 的时候参数丢失

  • 发现一个 bug at 2020年06月20日

    😂 我这个 “新手” 终于又能回帖了

  • 之前在生产环境一个小 partial 用时是 0.1 ms,但是因为要调用 1000 次,算下里也要用 100ms,果断去掉了。楼主的 100 ms 是本地开发环境还是生产环境的数据? 如果是本地的,建议测一下 production 的情况。如果是 production 的, 那多半不是 partial 的锅。

  • Shadow Table for Postgres at 2020年01月10日

    https://github.com/jhawthorn/discard#why-not-paranoia-or-acts_as_paranoid

    跑个题,软删除的需求最好选择 discard,paranoia 侵入性太强了

  • 因为你两台服务器都是 sidekiq 的 consumer, job 可能被被分配到任意一台执行

  • Agency.includes(:project).where("project.score > 60")