首页 > 解决方案 > 我应该如何从关联模型访问虚拟属性?

问题描述

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

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

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

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

在 User 模型中,我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”。

标签: ruby-on-railsactiveadminhas-and-belongs-to-manyvirtual-attribute

解决方案


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

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

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


推荐阅读