首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎样才能正确地将枚举与管理结合起来?

怎样才能正确地将枚举与管理结合起来?
EN

Stack Overflow用户
提问于 2020-07-27 17:58:49
回答 2查看 818关注 0票数 2

我有一个rails应用程序,用户有一个性别,这是一个枚举,0代表女性,1代表男性。

我在user_dashboard.rb中有以下代码:

代码语言:javascript
复制
require "administrate/base_dashboard"

class UserDashboard < Administrate::BaseDashboard
    ATTRIBUTE_TYPES = {
        posts: Field::HasMany,
        id: Field::Number.with_options(searchable: false),
        email: Field::String.with_options(searchable: true),
        password: Field::String.with_options(searchable: false),
        password_confirmation: Field::String.with_options(searchable: false),
        encrypted_password: Field::String.with_options(searchable: false),
        reset_password_token: Field::String.with_options(searchable: false),
        reset_password_sent_at: Field::DateTime.with_options(searchable: false),
        remember_created_at: Field::DateTime.with_options(searchable: false),
        first_name: Field::String.with_options(searchable: false),
        last_name: Field::String.with_options(searchable: false),
        gender: Field::Text.with_options(searchable: false),
        type: Field::String.with_options(searchable: false),
        created_at: Field::DateTime.with_options(searchable: false),
        updated_at: Field::DateTime.with_options(searchable: false),
        phone: Field::String.with_options(searchable: false),
    }.freeze

    COLLECTION_ATTRIBUTES = %i[
        posts
        email
        phone
        type
    ].freeze

    SHOW_PAGE_ATTRIBUTES = %i[
        posts
        id
        email
        phone
        first_name
        last_name
        gender
        type
        created_at
        updated_at
    ].freeze

    FORM_ATTRIBUTES = %i[
        posts
        email
        phone
        first_name
        last_name
        gender
        password
        password_confirmation
        type
    ].freeze

    COLLECTION_FILTERS = {}.freeze
end

new_admin_user_path的观点是:

只有管理员才能创建用户,但是他们必须用手打印出“男性”或“女性”这样的性别。是否有一种方法来集成一个选择菜单或单选按钮来管理创业板?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-27 18:43:24

一种选择是在您的ATTRIBUTE_TYPES中这样做:

代码语言:javascript
复制
ATTRIBUTE_TYPES = {
  ...
  gender: Field::Select.with_options(collection: ["female", "male"]),
}

您也可以尝试AdministrateFieldEnum创业板。https://github.com/valiot/administrate-field-enum

票数 3
EN

Stack Overflow用户

发布于 2020-09-22 19:07:42

假设gender应用程序/Person.rb模型的enum字段:

代码语言:javascript
复制
class Person < ApplicationRecord
  enum gender: { female: 0, male: 1 }
  # . . .
end

您的20200922125209_create_persons.rb迁移有:

代码语言:javascript
复制
class CreatePersons < ActiveRecord::Migration[6.0]
  def change
    create_table :persons do |t|
      t.integer :gender
# . . .

app/dashboards/person_dashboard.rb中添加以下内容:

代码语言:javascript
复制
  ATTRIBUTE_TYPES = {
    # . . .
    gender: Field::Select.with_options(searchable: false, collection: ->(field) { field.resource.class.send(field.attribute.to_s.pluralize).keys }),
    # . . .
  }

然后,只需将gender字段添加到COLLECTION_ATTRIBUTES,SHOW_PAGE_ATTRIBUTES数组中即可。

管理员的魔力将处理其余部分,在显示和索引视图中显示“女性”或“男性”,并在编辑形式中显示“选择下拉”。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63120944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档