我应该如何从关联模型访问虚拟属性?

How should I access a virtual attribute from an associated model?

我有两个通过 has_and_belongs_to_many 关系关联的模型。

我从第一个模型的(User:first_name:last_name 属性创建了一个虚拟属性 :full_name

我正在使用 ActiveAdmin,并试图在其关联模型的 ActiveAdmin 表单中显示用户的 :full_name 属性。

我已经检查了 Rails 控制台,发现 @user.full_name 存在。

在用户模型中,我使用找到的信息 here and here 定义了 full_name

下面是来自模型及其关联模型的 (Group) admin/group.rb 页面的代码。

# user.rb
def full_name
  [first_name, last_name].join(' ')
end

def full_name=(name)
  split = name.split(' ', 2)
  self.first_name = split.first
  self.last_name = split.last
end

# admin/group.rb 
form do |f|     
  f.inputs 'Details' do
    f.input :description
    f.input :users, as: :check_boxes, collection: User.pluck(:full_name, :id)
    f.submit
  end
end

我希望从属性 first_namelast_name 中查看全名。

使用我的代码,出现在表单中的每个用户都被标记为 "full_name"。

pluck 直接从数据库中抓取列。您收到此错误是因为您的 full_name 方法不是数据库列。

User.pluck(:full_name, :id)更改为

User.select(:id, :first_name, :last_name).all.map{|u| [u.full_name, u.id] }

您可以通过这样的映射访问您的 full_name 实例方法

User.all.map { |x| [x.full_name, x.id] }