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

问题描述 投票:0回答:2

我有一个通过has_and_belongs_to_many关系相关的两种车型。

我创建了从第一个模型(:full_nameUser虚拟属性:first_name:last_name属性。

我使用ActiveAdmin,并试图显示用户的:full_name属性,它的相关模型的ActiveAdmin形式。

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

在用户模式,我已经full_name使用,我发现herehere信息定义。

下面是从模型的代码和它相关的模型(Group)管理/ 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-rails activeadmin has-and-belongs-to-many virtual-attribute
2个回答
2
投票

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

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

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


0
投票

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

User.all.map { |x| [x.full_name, x.id] }
© www.soinside.com 2019 - 2024. All rights reserved.