我应该如何从关联模型访问虚拟属性?
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_name
和 last_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] }
我有两个通过 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_name
和 last_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] }