0

一个模型Transaction

belongs_to :consumer, class_name: 'User'

administrate gem 自动获取此关系并包括模型关系和 id

ATTRIBUTE_TYPES = {
  user: Field::BelongsTo,
  consumer: Field::BelongsTo.with_options(class_name: "User"),
  consumer_id: Field::Number,

试图通过关系搜索交易

  consumer: Field::BelongsTo.with_options(
    class_name: "User",
    searchable: true,
    searchable_fields: ['first_name', 'last_name', 'email', 'mobile']
  ),

抱怨用户为 nil 时出错

undefined method `+' for nil:NilClass

def display_resource(user)
  user ? user.last_name + ', ' + user.first_name : "No user provided"
end

堆栈中的哪个正在调用 user_dashboard。 使用自动生成 consumer: Field::BelongsTo.with_options(class_name: "User") 的 ATTRIBUTE_TYPES 定义时也会出现此错误

user.nil 是一个误导性错误,因为:

> Transaction.where('consumer_id IS NULL').size
=> 0

user_id 也会出现同样的情况,
如果去掉 class_name,则错误响应在直觉上是预期的:uninitialized constant Consumer.

自定义仪表板的文档指示选项设置:

:class_name (deprecated) - Specifies the name of the associated class.

但由此产生的删除表明这是必要的。如果在事务集合中调用 consumer_id,则会正确显示。

如何展示这个消费者?

管理 (0.14.0)
轨道 (6.0.3.6)

4

1 回答 1

1

您有此代码和此错误:

# The code
def display_resource(user)
  user ? user.last_name + ', ' + user.first_name : "No user provided"
end

# The error
# !> undefined method `+' for nil:NilClass

该错误与用户为零无关。该错误表明您正在尝试应用于+nil并且您没有尝试应用于+用户:您正在尝试将其应用于user.last_nameand user.first_name(以及", ")。

nil 是您期望 1) 存在且 2) 为字符串的这些值之一。失败的一种可能方式是用户缺少名字。

这是一种解决这种可能性的方法:

def display_resource(user)
  user ? [user.last_name, user.first_name].compact.join(", ") : "No user provided"
end
于 2021-04-02T14:26:54.380 回答