Rails 管理 - 自定义 has_many

Rails Administrate - Customize has_many

我正在使用 administrate gem。我有一组用户,并在该用户仪表板中显示 has_many 关系。

现在,我的user_dashboard看起来像

class UserDashboard < Administrate::BaseDashboard
  # ATTRIBUTE_TYPES
  # a hash that describes the type of each of the model's fields.
  #
  # Each different type represents an Administrate::Field object,
  # which determines how the attribute is displayed
  # on pages throughout the dashboard.
  ATTRIBUTE_TYPES = {
    ...
    sub_items: Field::HasMany.with_options(limit: 10)
  }

现在,这在默认情况下有效,但问题是它显示了 sub_itemsall 通常情况下没问题的用户,但我尝试 显示 has_many 关系(如果它具有特定类型)。比如默认我不想显示全部user.sub_items,我只想显示user.sub_items.where(category: [arr_of_options], sub_category: [arr_of_options]) ]

现在,我已经试过了

有谁知道我如何只能在管理仪表板中显示 某些 has_many 个对象?

要仅显示 has_many 关系的特定范围,请执行以下操作。

首先,在模型 class 上,创建一个新的 has_many 关系,与原始关系平行,名称不同,具有所需的范围。例如,在与管理源代码捆绑在一起的示例应用程序中,我向 Customer 模型添加了一个 new_england_orders 关联:

 class Customer < ApplicationRecord
   has_many :orders, dependent: :destroy
+  has_many :new_england_orders, ->{ where(address_state: %w{VT NH MA CT ME RI}) }, class_name: "Order"
   belongs_to :country, foreign_key: :country_code, primary_key: :code
   has_many :log_entries, as: :logeable

其次,将此关系添加到您的仪表板(可能会替换原来的),并确保添加 class_name 选项,以便管理员知道要使用哪个仪表板:

     lifetime_value: Field::Number.with_options(prefix: "$", decimals: 2),
     name: Field::String,
     orders: Field::HasMany.with_options(limit: 2, sort_by: :id),
+    new_england_orders: Field::HasMany.with_options(limit: 2, sort_by: :id, class_name: 'Order'),
     log_entries: Field::HasManyVariant.with_options(limit: 2, sort_by: :id),
     updated_at: Field::DateTime,
     kind: Field::Select.with_options(collection: Customer::KINDS),

您新的、范围内的关联现在应该出现在您的仪表板上。