我的模特功能:
def admin_user
users.where('roles @> ARRAY[?]::varchar[]', ['admin']).first
end
我的管理员配置:
config.model 'Team' do
list do
field :admin_user
end
end
它显示如下:
如何将其链接到用户管理视图?
答案 0 :(得分:4)
它显示#<User:0x0....>
的原因是因为您的admin_user
返回了ActiveRecord的实例。当RailsAdmin输出时,它调用其#to_s
方法,默认情况下返回上面的输出。您可以覆盖该方法,使其看起来像这样:
# User class
def to_s
name
end
或者如果您愿意,可以修改admin_user
以返回格式正确的字符串而不是ActiveRecord。
为了“将其链接到用户管理视图”,您需要在config.model
中进行更多配置。您需要为其定义pretty_value
并覆盖默认渲染。
config.model 'Team' do
pretty_value do
# user's active record
user = bindings[:object]
# path to its RailsAdmin 'show' page
path = bindings[:view].show_path(model_name: 'User', id: bindings[:object].id)
# <a href...> tag to it
bindings[:view].tag(:a, href: path) << user.admin_user
end
end
请记住,最后一行中的user.admin_user
假设它返回您想要链接的字符串或User
具有正确定义的#to_s
。
以下是官方文档https://github.com/sferik/rails_admin/wiki/Custom-list-fields-as-HTML-tags
的链接答案 1 :(得分:0)
还有另一种方式 您可以创建另一个模型
类AdminUser&lt;用户 def self.default_scope where('roles @&gt; ARRAY [?] :: varchar []',['admin']) 端
after_initialize do
self.roles << ['admin']
end
端
然后是团队模型 班组 belongs_to:admin_user,foreign_key :: user_id
rails_admin do
list do
field :admin_user
end
end
端
这不仅会在团队索引上显示正确的内容,而且还允许您通过管理员的属性(如姓名或电子邮件)过滤和搜索团队,同时还允许您使用其创建管理员拥有索引和编辑视图。 这可能有点矫枉过正,但它肯定会解决你的问题。