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

时间:2019-02-04 03:20:39

标签: ruby-on-rails activeadmin has-and-belongs-to-many virtual-attribute

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

我已经从第一个模型的:full_nameUser属性创建了虚拟属性:first_name

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

我已经在Rails控制台中签入,发现:full_name存在。

在用户模型中,我使用发现的herehere信息定义了@user.full_name

下面是该模型及其相关模型的(full_name)admin / group.rb页面中的代码。

Group

我希望从属性# 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_name中查看全名。

照我的原样,出现在表单中的每个用户都被标记为“全名”。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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