ruby-on-rails - 我应该如何从关联模型访问虚拟属性?
问题描述
我有两个通过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_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] }
推荐阅读
- mysql - 如何选择每个组的最后一个条目?
- apache-spark - Pyspark 忽略 pyspark-sql-functions 中数据帧的过滤
- c# - 依赖注入在本地 Azure 函数中不起作用
- jquery - jQuery Select2 - 如何隐藏 Select2 Optgroup
- amazon-web-services - 超出并发限制扩展 Lambda 函数
- javascript - 如何通过单线解决方案将包含对象数组的对象减少为内部对象?
- angular - Jackson 无法反序列化 empy Jhipster 下拉项
- java - 如何安装 SSL 证书以使用客户端 Web 服务?
- ruby-on-rails - Rails 应用程序从 Rails-1.1.2 迁移到 2.0.0 及更高版本
- sql - System.NullReferenceException:“对象引用未设置为对象的实例。” PostedFile[] 为空