ActiveAdmin.register User do config.batch_actions = true action_item :upload_csv, only: :index do link_to I18n.t("active_admin.users.upload_from_csv"), action: "upload_csv" end action_item :confirm, only: :show do unless user.confirmed? link_to I18n.t("active_admin.users.confirm_user"), confirm_admin_user_path(user), method: :put end end collection_action :upload_csv do render "admin/csv/upload_csv" end collection_action :import_csv, method: :post do errors = UserImporter.call(params[:dump][:organization_id], params[:dump][:file]) flash[:error] = errors.join("
").html_safe if errors.present? redirect_to action: :index end member_action :confirm, method: :put do resource.skip_confirmation! if resource.save redirect_to admin_user_path(resource), notice: I18n.t("active_admin.users.confirmed_notice") else redirect_to admin_user_path(resource), alert: resource.errors.full_messages.to_sentence end end scope :all scope :without_memberships index do selectable_column column do |user| link_to image_tag(avatar_url(user, 24)), admin_user_path(user) end column :username column :email column :organizations do |u| u.organizations.map(&:to_s).join(", ") end column :posts do |u| u.posts.count end column :confirmed_at column :created_at actions end filter :organizations filter :email filter :username filter :phone filter :postcode filter :locale filter :created_at form do |f| f.semantic_errors *f.object.errors.attribute_names f.inputs do f.input :username f.input :email f.input :phone f.input :postcode f.input :gender, as: :select, collection: User::GENDERS f.input :locale, as: :select, collection: I18n.available_locales f.input :password, required: false, input_html: { autocomplete: "new-password" } f.input :password_confirmation, required: false, input_html: { autocomplete: "new-password" } f.input :confirm_immediately, as: :boolean if f.object.new_record? end f.inputs "Memberships" do f.has_many :members, allow_destroy: true do |m| m.input :organization, collection: Organization.order(id: :asc).pluck(:name, :id) m.input :active m.input :manager end end f.actions end show do |u| columns do column do attributes_table *default_attribute_table_rows end column do panel "Avatar" do image_tag avatar_url(u, 160) end panel "Memberships" do table_for user.members do column :organization column :active do |member| "✔" if member.active end column :manager do |member| "✔" if member.manager end column :entry_date column :member_uid column :tag_list end end end end end permit_params :username, :email, :phone, :postcode, :gender, :locale, :confirm_immediately, :password, :password_confirmation, members_attributes: [:id, :organization_id, :active, :manager, :_destroy] controller do def create_resource(obj) obj.skip_confirmation! if obj.confirm_immediately super end def update_resource(obj, attributes) if attributes.first[:password].blank? attributes.first.delete(:password) attributes.first.delete(:password_confirmation) end super end end end